10

全て、

標準の fields_for セットアップで問題が発生しています。私の「_form」パーシャルには次のものがあります。

<div class="comment_list">
  <%= f.fields_for :comments do |cf| %>
    <%= render :partial => 'comments/comment_fields', :locals => {:f => cf, :tester => true} %>
  <% end %>

  <%= link_to_add_fields "Add a comment", f, :comments %>
</div>

「_comment_fields」パーシャルには、通常のフィールドとテスト変数があります。

<%= tester.to_s %>

tester 変数を削除すると、すべてが正常に機能します。テスト変数を追加するとすぐに、次のエラーが発生します。

ActionView::Template::Error (#Class:0xa1f3664>:0xa1f1bd4> の未定義のローカル変数またはメソッド `tester')

複数のローカルで fields_for を使用しているときに、他の誰かがこの問題に遭遇しましたか?


もう少し詳しく説明すると、私の「_comment_fields」部分は次のようになります。

<div class="comment dynamic_field">
  <span class="comment_content"><%= f.text_field :content, :class => "comment_content" %></span>
  <%= tester.to_s %>
  <%= link_to_remove_fields "remove", f %>
</div>

「_form」パーシャルからのみ呼び出されます。

4

3 に答える 3

16

全て、

ハクニンはお金を稼いでいた。複数の場所でパーシャルを呼び出していました。2 番目のスポットは、ヘルパー メソッド「link_to_add_fields」にありました。これを使用して、javascript を使用してフィールドを追加します。

メソッドは次のようになりました。

# generates add fields on a dynamic form
def link_to_add_fields(name, f, association, locals={})  
  new_object = f.object.class.reflect_on_association(association).klass.new  
  fields = f.fields_for(association, new_object, 
                      :child_index => "new_#{association}") do |builder|  
    render(association.to_s.singularize + "_fields", :f => builder)  
  end  

  link_to(name, "#", :class => "dynamic_add", 'data-association' => "#{association}",
                                            'data-content' => "#{fields}")
end  

これにより、ローカルを render メソッドに渡すことができないことに注意してください。私はそれを次のように変更しました:

# generates add fields on a dynamic form
def link_to_add_fields(name, f, association, locals={})  
  new_object = f.object.class.reflect_on_association(association).klass.new  
  fields = f.fields_for(association, new_object, 
                      :child_index => "new_#{association}") do |builder|  
    render(association.to_s.singularize + "_fields", locals.merge!(:f => builder))  
  end  

  link_to(name, "#", :class => "dynamic_add", 'data-association' => "#{association}",
                                            'data-content' => "#{fields}")
end  

_form パーシャルでの link_to_add_fields 呼び出しは次のようになります。

<%= link_to_add_fields "Add a comment", f, :comments, :tester => true %>

...そして、フォームにフィールドを動的に追加し、追加のローカルを渡すことができます。うまくいけば、これは他の誰かを助けるでしょう。

于 2010-11-22T20:21:00.297 に答える
1

変化 :

<%= render :partial => 'comments/comment_fields', :locals => {:f => cf, :tester => true} %>

に :

<%= render 'comments/comment_fields', :locals => {:f => cf, :tester => true} %>

私はちょうど同じ問題を抱えていました。

于 2011-11-24T16:12:45.630 に答える
0

フォームフィールドでテスター変数を使用する必要がある理由がわかりません。しかし、テスター変数を部分的な形でどのように使用していますか?コードを貼り付けてください。

私はそれを強く信じています

<%= tester.to_s %>
その変数の値のみを表示するため、問題は発生しません。

于 2010-11-22T18:47:51.033 に答える