0

現在、セールスコントローラーに次のような作成アクションがあります。

def create
    @sale = Sale.new(params[:sale].except(:vehicles_attributes))
    if @sale.save
      redirect_to @sale, :notice => "Successfully created sale."
    else
      render :action => 'new'
    end
end

リンクされた選択を設定するためにのみ使用され、送信されるべきではないいくつかの属性を除外することを目的としています(それらの列はありません)。

上記のコントローラーコードでは、パラメーターにまだ含まれ"sale"=>{"vehicles_attributes"=>{"0"=>{"make"=>"","model"=>""}}}ていることがわかりました。そのため、コントローラーコードに何かが欠けているようです。

編集:もう少し掘り下げた後、フォームによって送信されるべきではないパラメータを削除する機会を例外コードが取得する前に、mass_assignment例外が発生していることがわかりました。そのため、正方形に戻ります。

mass_assignmentエラーが発生する前に、フォームから送信されるべきではないフィールドを確実に削除するにはどうすればよいですか?

4

1 に答える 1

1

私の知る限り、new呼び出し中にmass_assignmentエラーが発生するはずなので、あなたのやり方はうまくいくはずです。私はそのexcept方法を使ったことがありませんが。reject!この方法を使ってみましたか?

def create
  params[:sale].reject! { |k, v| k == :vehicles_attributes }
  @sale = Sale.new(params[:sale])
  if @sale.save
    redirect_to @sale, :notice => "Successfully created sale."
  else
    render :action => 'new'
  end
end

保持する必要がある場合は、元のハッシュからコピーを削除する代わりに、コピーを提供する方法(バングなし)を:vehicles_attributes使用することもできます。reject

于 2012-08-31T16:51:38.287 に答える