这就是我正在做的事情:-
@userdata =find_or_create_by_id(:id=>params[:id])
现在我怎么知道我需要使用的天气
@userdata.save
或
@userdata.update_attributes params[:user_object]
以及如何传递我的用户对象以防万一@userdata.save
这就是我正在做的事情:-
@userdata =find_or_create_by_id(:id=>params[:id])
现在我怎么知道我需要使用的天气
@userdata.save
或
@userdata.update_attributes params[:user_object]
以及如何传递我的用户对象以防万一@userdata.save
不确定用户保存或更新属性是什么意思。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 都可以正常工作。
也许,这可以帮助:
@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
或者更好的是,将您自己的方法作为find_or_create_by_id 的最佳方法,但如果找到记录则更新属性
试试这个。第一行搜索对象并在不存在时创建。
userdata = UserModel.where(:id=>params[:id]).first_or_create(:id=>params[:id])
unless userdata .nil?
update_attributes params[:user_object]
end