find_or_create_by-不更新

Ger*_*int 5 ruby activerecord ruby-on-rails

我想将产品ID和零售商ID提交给我的控制器,如果该组合存在于数据库中,我想使用提交的参数更新该记录,否则,请创建一个新记录。

我的控制器在下面,目前我可以看到,如果该组合不存在,那么将创建记录,但是当找到该组合时,它将进行选择查询并且记录不会更新。

如何获得更新而不只是选择?

谢谢

控制器:

      def AddNewPrice
            @newPrice = ProductPrice.find_or_create_by(product_id: params[:product_id], retailer_id: params[:retailer_id])                  
      end
Run Code Online (Sandbox Code Playgroud)

更新资料

对不起..刚才提到,当我更新时,我想更新作为参数出现的价格属性

Leo*_*rea 8

你现在要做的其实是建立一个记录,如果组合product_idretailer_id不存在。如果它确实存在,那么没有什么可做的..

如果您想更新属性(如果存在)或创建它(如果不存在),您可以find_or_initialize_byupdate_attributes

def AddNewPrice
  @newPrice = ProductPrice.find_or_initialize_by(product_id: params[:product_id], retailer_id: params[:retailer_id])
  @newPrice.update_attributes(price: "updated value")                  
end
Run Code Online (Sandbox Code Playgroud)


Sar*_*mar 6

因为,从方法名称中可以清楚地看出,它会找到与给定条件匹配的记录,或者如果记录不存在,则使用给定的 product_id 和retail_id 创建一个新记录。你需要做一些这样的事情来更新记录

def add_new_price
  new_price = ProductPrice.find_or_create_by(product_id: params[:product_id], retailer_id: params[:retailer_id])
  new_price.update_attributes({attr: params[:attr]})
end
Run Code Online (Sandbox Code Playgroud)