我跟随Railscast第165集(修订版)学习如何在一个表单中编辑和更新多个记录。但当我提交表单同时编辑多个记录时,我得到:
ActiveModel::ForbiddenAttributesError
对于这条线路:
product.update_attributes(params[:product].reject { |k,v| v.blank? })
参数:
参数:
{"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
试试这个
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
字段列表是您希望用户发送以更新或创建的字段。
你可以在这里找到更多信息
错误ActiveModel::ForbiddenAttributes当您尝试用params对象更新模型时,会引发错误,该对象的参数不被允许,表单中存在的所有字段都必须被允许更新记录。