2

Rails Form Builder (この場合は simple_form) を使用してオブジェクトにアクセスする方法を理解しようとしています。

http://apidock.com/rails/ActionView/Helpers/FormHelper/fields_forで説明されているように、次のようにオブジェクトを渡します。

- @document.sections.each do |section|
  = f.simple_fields_for :sections, section do |section_form|
    = render 'section_fields', :f => section_form

ただし、パーシャル内で f.object を呼び出すと、nil id などを含む「新しい」セクション オブジェクトが取得され、link_to パスが壊れます。

変数を「標準」の方法で渡すことでさえ、次のように壊れているようです。

- @document.sections.each do |section|
  = f.simple_fields_for :sections, section do |section_form|
    = render 'section_fields', :f => section_form, :foo => section

パーシャル内で foo undefined を持っています。

fields_for has_many アソシエーションを使用してフォームが構築されている目的のオブジェクトにアクセスするにはどうすればよいですか?

4

2 に答える 2

0

関連するオブジェクトをビルドし、次のようにコードを変更する必要があると思います。

- @document.sections.build if @document.sections.empty?
  = f.simple_fields_for :sections, @document.sections do |section_form|
   = render 'section_fields', :f => section_form
于 2012-10-07T13:47:08.080 に答える
0

オブジェクトが明らかにその時点で存在しなかったため、Cocoon メソッド 'link_to_add_association' が f.object を含む link_to を壊す新しいオブジェクトを生成していたことが判明しました。

'unless f.object.new_record?' を追加するだけです。Cocoon が生成する新しい (非表示の) レコードを無視します。

于 2012-10-07T16:18:32.017 に答える