2

過去記事の再編集です

以前は、この問題は繭に関連していると考えていましたが、次のコードは繭を呼び出すことさえないため、今はそうは思いません。

ネストされた属性を含むフォームを更新するたびに、ネストされたレコードの数が 2 倍になります。私が収集できることから、何かを行う前にすぐに更新が表示され、フォームに重複したエントリが表示されるため、フォームが呼び出されたときにこれが発生します

以下のHAMLのビューに関連するコードがあります-

  %h3 Household Members
    = f.simple_fields_for :neighbors   do  |neighbor|
    = render 'neighbor_fields', :f => neighbor

コントローラーで適切な露出を使用しているため、コントローラーは次のようになります。

class HouseholdsController < ApplicationController

  expose(:households)
  expose(:household, strategy: StrongParametersStrategy)

  def create
    if household.save
      redirect_to households_path, notice: 'Household was successfully created.'
   else
     render 'new'
   end
 end

def update
  if household.save
    redirect_to households_path, notice: 'Household was successfully updated.'
  else
    render 'edit'
  end
end

def destroy
  household.destroy

redirect_to households_path, notice: 'Household deleted.'
end

ネストされた属性が倍増しないようにするにはどうすればよいですか?

4

1 に答える 1

4

これまで適切な露出を使用したことはありませんが、繭の有無にかかわらず、ネストされたフォームを使用して同じ問題に遭遇しました。原因はどちらの場合も同じでした。:idネストされた属性のホワイトリストではなく、強力なパラメーターに関係しています。

あなたがやろうとしていることを正確に理解できるかどうかわからないので、古典的な種類の投稿/コメントの例を挙げます. 投稿用のフォームがあり、動的にコメント フィールドを追加したい場合、コントローラーの強力なパラメーターは次のようになります。

params.require(:post).permit(:content, comments_attributes: [:id, :content, :_destroy])

:id:_destroy、およびネストされたフィールドが持つその他の属性をホワイトリストに登録する必要があります。コメントに関連付けられていない場合:id、Rails はそれが新しいコメントであると見なし、新しいレコードを作成します。をホワイトリストに登録する:idと、レールはそれが既存のオブジェクトであることを認識し、それを更新するだけです。

于 2013-11-17T03:14:45.863 に答える