将记录添加到现有用户

时间:2014-06-07 02:29:09

标签: ruby-on-rails-4 devise

目标是将记录添加到名为Result的表中。如果user(email)不存在,则用户Table将创建一个新帐户,然后创建Result记录。

user = User.where(:email => email)

if user.empty?
   User.create!(:email => email, :password => 'penita_pena')
   new_user = User.last
   new_user.results.create!(patient: patient, gender: gender, insurance_plan: insurance_plan, age: age)
else
  user.results.create!(patient: patient, gender: gender, insurance_plan: insurance_plan, age: age)
end

第一部分工作正常,但在else之后我收到以下错误:

undefined method `results' for #<ActiveRecord::Relation::ActiveRecord_Relation_User:0x007fe8d5ff2a10>

我认为user持有与电子邮件匹配的用户对象。我做错了什么?

1 个答案:

答案 0 :(得分:1)

使用

User.find_by(email: email). 

您正在使用该电子邮件搜索所有用户,因此用户不是单个用户对象,而是对象列表。另一种方式是

User.where(email: email).first.

编写相同代码的更好方法是:

user = User.find_or_create_by!(email: email) do |user|
  user.password = 'penita_pena'
end
user.results.create!(...)