Rails 3.2.8根据条件插入或更新

时间:2012-10-20 11:45:19

标签: 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是否有一些神奇的东西在一行中做到了?

我没有将email声明为主键,但它将是唯一的。它会帮助我宣布它是主要的吗?

2 个答案:

答案 0 :(得分:6)

您的代码不起作用,因为save的参数是选项的散列(例如应运行验证),而不是属性的更改。您可能需要update_attributes!。我通常会写类似

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

答案 1 :(得分:0)

试试这种方式

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