0

我提交了一个保存多条记录的表单,参数如下所示:

{
  "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在我的模型中使用 将我的 url 从 ID 更改为另一个列值。

有没有办法将params[:products].keys它们换成适当的 ID,以便我可以在.update()语句中使用 ID。Product.find_by_column_name(321).id尽管我不知道该怎么做,但我可以用来获取 id。对 Rails 还是很陌生。

任何帮助,将不胜感激。谢谢。

4

1 回答 1

1

查看这里 的源代码#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
于 2013-02-18T00:50:57.797 回答