rails4多记录更新

时间:2015-10-13 14:40:54

标签: ruby-on-rails-4.2

以下控制器操作是在rails 4.2下失败,而它在rails 3.2中运行

params[:inventoris_for_product].each do |id, inventori_params|
  @inventori = Inventori.find(id)
  @inventori.update_attributes(inventori_params)
end

即使私有方法启用强参数

def inventori_params
  params.require(:inventori).permit(:product_id, ...)
end

ActiveModel返回ForbiddenAttributesError

提交的参数格式为Parameters: {"utf8"=>"✓", "authenticity_token"=>"...", "inventoris_for_product"=>{"2140"=>{"quantity"=>"4", "price_1"=>"45.0" [...]

可以覆盖,

params[:inventoris_for_product].each do |id, attrs|
  @inventori = Inventori.find(id)
  unlocked_attrs = ActiveSupport::HashWithIndifferentAccess.new(attrs)
  @inventori.update_attributes(unlocked_attrs)
end

但不希望。

新的句法方法我缺少什么?

2 个答案:

答案 0 :(得分:0)

如果您要更新多条记录,可以尝试链接:

Inventori.where(id: [1, 2, ...]).update_all(attr_name: val)

答案 1 :(得分:0)

使用

设置控制器操作
@inventori.update attrs.permit(:quantity, :price_1[...])

诀窍