0

这就是我正在做的事情:-

@userdata =find_or_create_by_id(:id=>params[:id])

现在我怎么知道我需要使用的天气 @userdata.save

@userdata.update_attributes params[:user_object]

以及如何传递我的用户对象以防万一@userdata.save

4

3 回答 3

3

不确定用户保存或更新属性是什么意思。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 都可以正常工作。

于 2013-05-16T12:31:01.427 回答
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

或者更好的是,将您自己的方法作为find_or_create_by_id 的最佳方法,但如果找到记录则更新属性

于 2013-05-16T12:31:10.253 回答
1

试试这个。第一行搜索对象并在不存在时创建。

   userdata = UserModel.where(:id=>params[:id]).first_or_create(:id=>params[:id])
    unless userdata .nil?
      update_attributes params[:user_object]
    end
于 2013-05-16T15:15:21.170 回答