我想向我的控制器提交产品ID和零售商ID,如果数据库中存在的组合我想用提交的参数更新该记录,如果没有,则创建新记录。
我的控制器在下面,目前我可以看到,如果组合不存在,则创建记录,但是当找到组合时,它会执行选择查询并且记录不会更新。
如何让它更新而不只是选择?
由于
控制器:
def AddNewPrice
@newPrice = ProductPrice.find_or_create_by(product_id: params[:product_id], retailer_id: params[:retailer_id])
end
更新
抱歉..只是提到,当我更新时,我想更新作为参数进来的价格属性
答案 0 :(得分:4)
因为,它从方法名称中清楚地发现它匹配给定条件的记录匹配,或者使用product_id创建新记录,并且如果记录不存在则使用retailer_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
答案 1 :(得分:3)
与方法名称一样,找到对象(如果存在),创建,如果不存在。
如果您想更新某些内容,可以执行以下操作:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input type="button" class="submit_wide" value="Submit"/>
答案 2 :(得分:2)
如果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