Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 4 向现有用户添加记录_Ruby On Rails 4_Devise - Fatal编程技术网

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负责创建用户。酷,再次谢谢你,汉佩。