我跟随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
答案 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,该对象具有未被授权的参数,表单中存在的所有字段都必须被授权以更新记录。