現在、保存する前にコントローラーのパラメーターからいくつかのフィールドを削除する必要があるフォームがあります (フィールドの列はなく、リンクされた選択を入力するためにのみ使用されます)。
問題は次のとおりです。フィールドを削除する前に、送信してはならないフィールドに対して一括割り当てエラーが発生します。コントローラーが到達したときにのみエラーが発生することを理解していました@sale = Sale.new(params[:sale])
が、それより前に発生しているようです(以下のコントローラーの最初に行を配置しましたが、puts "sale params: " + params[:sale].to_s
発生せず、質量割り当てエラーのみが発生します.
私のコントローラー作成アクションコードは次のようになります。
def create
puts "sale params: " + params[:sale].to_s
params[:sale] = params[:sale].except([:vehicles_attributes])
@sale = Sale.new(params[:sale])
if @sale.save
redirect_to @sale, :notice => "Successfully created address."
else
render :action => 'new'
end
end
一括割り当てエラーが発生する前に、:vehicles_attributes ハッシュが params から確実に削除されるようにするにはどうすればよいですか?
編集: 要求どおりの完全なエラー:
ActiveModel::MassAssignmentSecurity::Error in SalesController#create
Can't mass-assign protected attributes: make, model
Request
Parameters:
{"utf8"=>"✓",
"authenticity_token"=>"LX/uEp5o9smc3sCcjQbOXQQgaK2wihvS0OPZTdNOj6w=",
"sale"=>{
"sale_type_id"=>"1",
"date"=>"",
"customer_attributes"=>{
"customer_type_id"=>"1",
"emails_attributes"=>{
"0"=>{
"value"=>""}}},
"vehicles_attributes"=>{
"0"=>{
"make"=>"4",
"model"=>"38",
"trim_id"=>"658",
"model_year_id"=>"12"
}}}}
Make と Model は、実行中に削除しようとしている属性ですparams[:sale] = params[:sale].except([:vehicles_attributes])
(エラーからわかるように、これらは :vehicles_attributes ハッシュにあります)。