Ruby on rails 4 向现有用户添加记录
目标是向名为Ruby on rails 4 向现有用户添加记录,ruby-on-rails-4,devise,Ruby On Rails 4,Devise,目标是向名为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, g
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
持有与电子邮件匹配的用户对象。我做错了什么 使用
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!(...)
嗨,谢谢汉佩,找到你或创造你的东西!我需要向用户发送不同的电子邮件通知(当前和新)。我不知道如何用这种方法实现这一点。我阅读了文档,我了解到block负责创建用户。酷,再次谢谢你,汉佩。