Rails ActiveModel :: ForbiddenAttributesError编辑多条记录

时间:2014-11-06 23:49:56

标签: ruby-on-rails strong-parameters activemodel

我跟随Railscast第165集(修订版)发布了关于如何在一个表单中编辑和更新多个记录的发球台。但是,当我提交表单同时编辑多个记录时,我得到:

ActiveModel::ForbiddenAttributesError

对于这一行:

product.update_attributes(params[:product].reject { |k,v| v.blank? })

PARAMS:

参数:

{"utf8"=>"✓",
 "_method"=>"put",
 "authenticity_token"=>"g5C2siF5GcWfPxhph4utWn8JBs2JXEpIUBDO6OlFyQQ=",
 "product_ids"=>["11142",
 "11143"],
 "product"=>{"user_id"=>"",
 "allow_multi_users"=>"true",
 "state_id"=>"",
 "site"=>"",
 "department"=>"",
 "room"=>"",
 "asset_type_id"=>"",
 "asset_model_id"=>"",
 "sync_with_jss"=>"",
 "carrier_id"=>"",
 "mobile_contract_req_date"=>"",
 "mobile_contract_end_date"=>"",
 "mobile_international_plan"=>"",
 "mobile_tethering"=>"",
 "mobile_account"=>""},
 "commit"=>"Update"}`

通常,我认为这是因为我没有在强参数中允许属性。但这不是一个属性,它是包含所有值的形式的参数。

这适用于我的Products.rb模型,所以它不应该接受 params [:product]

products_controller.rb

private  
  def product_params
    params.require(:product).permit(:mobile_account, :mobile_international_plan, :mobile_tethering, :mobile_contract_end_date.. )
  end

使用Rails 4.0.0

1 个答案:

答案 0 :(得分:2)

试试这个

def update
  ...
  product.update_attributes(product_params)
  ...
end

private

  def product_params
    params.require(:product).permit(:mobile_account, :mobile_international_plan, :mobile_tethering, :mobile_contract_end_date.. )
  end

字段列表是您希望用户发送以更新或创建的字段。

您可以找到更多信息here

当您尝试使用params对象更新模型时会引发错误ActiveModel :: ForbiddenAttributesError,该对象具有未被授权的参数,表单中存在的所有字段都必须被授权以更新记录。