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)
更新资料
对不起..刚才提到,当我更新时,我想更新作为参数出现的价格属性
你现在要做的其实是建立一个记录,如果组合product_id和retailer_id不存在。如果它确实存在,那么没有什么可做的..
如果您想更新属性(如果存在)或创建它(如果不存在),您可以find_or_initialize_by与update_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)
因为,从方法名称中可以清楚地看出,它会找到与给定条件匹配的记录,或者如果记录不存在,则使用给定的 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)
| 归档时间: |
|
| 查看次数: |
3277 次 |
| 最近记录: |