以下控制器操作是在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
但不希望。
新的句法方法我缺少什么?
答案 0 :(得分:0)
如果您要更新多条记录,可以尝试链接:
Inventori.where(id: [1, 2, ...]).update_all(attr_name: val)
答案 1 :(得分:0)
使用
设置控制器操作@inventori.update attrs.permit(:quantity, :price_1[...])
诀窍