Ruby on rails Rails 3.2.8根据条件插入或更新

Ruby on rails Rails 3.2.8根据条件插入或更新,ruby-on-rails,ruby-on-rails-3.2,Ruby On Rails,Ruby On Rails 3.2,我是Rails新手,使用此代码进行更新或插入 user = User.find_by_email(params[:email]) if user.nil? User.create!(params) else user.save(params) end // params is a hash with keys as table columns 此代码不起作用。另外,我想知道Rails是否有什么神奇的东西可以在一行中实现这一点 我没有将电子邮件声明为主键,但它将是唯一的。将其声明为主

我是Rails新手,使用此代码进行更新或插入

user = User.find_by_email(params[:email])
if user.nil?
  User.create!(params)
else
  user.save(params)
end 

// params is a hash with keys as table columns
此代码不起作用。另外,我想知道Rails是否有什么神奇的东西可以在一行中实现这一点


我没有将
电子邮件
声明为主键,但它将是唯一的。将其声明为主选项是否有帮助?

您的代码不起作用,因为要保存的参数是作为选项的散列(例如应运行验证),而不是对属性的更改。您可能需要
更新\u属性取而代之。我通常会写这样的东西

User.where(:email => params[:email]).first_or_initialize.update_attributes!(params)

您的代码不起作用,因为
保存
的参数是作为选项的散列(例如应该运行验证),而不是属性的更改。您可能需要
更新\u属性取而代之。我通常会写这样的东西

User.where(:email => params[:email]).first_or_initialize.update_attributes!(params)
这样试试

user = User.find_by_email(params[:email])  # if you receive email in params[:email]
unless user.present?
  @user = User.create!(params[:user]) # params[:user] replace with whatever you receive all your attributes 
else
  @user = user # here if your want to update something you can do it by using update attributes
end
这样试试

user = User.find_by_email(params[:email])  # if you receive email in params[:email]
unless user.present?
  @user = User.create!(params[:user]) # params[:user] replace with whatever you receive all your attributes 
else
  @user = user # here if your want to update something you can do it by using update attributes
end

是的,我刚才注意到在您回答之前,
save
没有将属性作为参数。你能分享一个资源吗?我在哪里可以找到rails方法的简短摘要/文档?你的答案很好。
first\u或\u initialize
在这里做什么?apidock.com可以。first_或_initialize返回第一个匹配行或userYes的新实例,我刚才注意到在回答之前,
save
没有将属性作为参数。你能分享一个资源吗?我在哪里可以找到rails方法的简短摘要/文档?你的答案很好。
first\u或\u initialize
在这里做什么?apidock.com可以。first\u或\u initialize返回第一个匹配行或用户的新实例