我有一个提交的表单正在保存多个记录,参数看起来像这样:
{
"utf8"=>"✓",
"_method"=>"put",
"products"=> {
"321" => {
"sale_price"=>"10"
},
"104" => {
"sale_price"=>"10"
}
}
}
然后在我的控制器中,我有这个:
@updated_products = Product.update(params[:products].keys, params[:products].values)
这要求键(321,104)为ID
但是,我正在使用模型中的to_param
将我的网址从ID更改为另一个列值。
有没有办法获取params[:products].keys
并将它们换成适当的ID,以便我可以在.update()
语句中使用ID。
我可以使用Product.find_by_column_name(321).id
来获取id,尽管我不知道如何做到这一点。还是铁杆新手。
任何帮助将不胜感激。感谢。
答案 0 :(得分:1)
查看源代码here #update
遍历每个密钥并运行update_attributes
,以便进行所有验证。您可以将方法更改为
@updated_products = params[:products].inject([]) do |array, (column_id, attributes)|
product = Product.find_by_column_id column_id
if product.update_attributes(attributes)
array << product
else
array
end
end
这可能看起来有点复杂,但它等于下面的这个更容易理解和代码阅读
@updated_products = []
params[:products].each do |column_id, attributes|
product = Product.find_by_column_id column_id
if product.update_attributes(attributes)
@updated_products << product
end
end