1

我是 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为主键,但它会是唯一的。它会帮助我将其声明为主要吗?

4

2 回答 2

6

您的代码不起作用,因为参数 tosave是选项的哈希(例如应该运行验证),而不是对属性的更改。你可能想要update_attributes!。我通常会写类似的东西

User.where(:email => params[:email]).first_or_initialize.update_attributes!(params)
于 2012-10-20T12:03:13.877 回答
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
于 2012-10-20T12:09:59.890 回答