这就是我正在做的事情: -
@userdata =find_or_create_by_id(:id=>params[:id])
现在我怎么知道我需要使用的天气
@userdata.save
或
@userdata.update_attributes params[:user_object]
如果@userdata.save
答案 0 :(得分:3)
不确定用户是使用save还是update_attributes是什么意思。 find_or_create_by_id将返回一个用户对象,可能会也可能不会持久化,具体取决于是否已通过验证(如果已经存在验证)。您可以通过询问@userdata.persisted?
无论如何,我建议使用first_or_create:
@userdata = User.where(:id => params[:id]).first_or_create(params[:user_object])
if @userdata.persisted?
# proceed
else
# errors in params, recover
end
更新: Kiddorails对于上述代码是正确的,如果它在通话之前存在,则不会更新记录。解决方案实际上非常简单。对不起我第一次没弄错:
@userdata = User.where(:id => params[:id]).first || User.new
@userdata.update_attributes(params[:user_object])
这是有效的,因为无论记录是新记录还是持久记录,update_attributes都可以正常工作。
答案 1 :(得分:1)
也许,这可以提供帮助:
@userdata = User.find_or_create_by_id(params[:id])
if @userdata.new_record? #=> @userdata is a new record
#Add attributes
@userdata.save
else
@userdata.update_attributes params[:user_object]
end
甚至更好,将您自己的方法设为Best way to find_or_create_by_id but update the attributes if the record is found
答案 2 :(得分:1)
试试这个。 第一行搜索对象和create if不存在。
userdata = UserModel.where(:id=>params[:id]).first_or_create(:id=>params[:id])
unless userdata .nil?
update_attributes params[:user_object]
end