目标是将记录添加到名为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
持有与电子邮件匹配的用户对象。我做错了什么?
答案 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!(...)