рельсы fields_for рендерит частичное с несколькими местными жителями, производящими неопределенную переменную - PullRequest
10 голосов
/ 22 ноября 2010

Все,

У меня проблема со стандартными полями_ для настройки.В моей части «_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 %>

Когда я удаляю тестерпеременная, все работает хорошо.Как только я добавляю тестовую переменную, я получаю эту ошибку:

ActionView :: Template :: Error (неопределенная локальная переменная или метод `tester 'для #Class: 0xa1f3664>: 0xa1f1bd4>)

Кто-нибудь еще сталкивался с этой проблемой при использовании 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".

Ответы [ 3 ]

16 голосов
/ 22 ноября 2010

Все,

Хакунин был на деньгах.Я звонил по частям в нескольких местах.Второе место было в моем вспомогательном методе "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  

Обратите внимание, что это не позволяет передавать любые локальные объекты в метод рендеринга.Я изменил это так:

# 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  

Теперь мой вызов link_to_add_fields в моей части _form выглядит следующим образом:

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

... и я могу динамически добавлять поля в мою форму И передаватьдополнительные местные жители.Надеюсь, это поможет кому-то еще.

1 голос
/ 24 ноября 2011

Изменение:

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

до:

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

У меня была такая же проблема.

0 голосов
/ 22 ноября 2010

Мне не понятно, зачем вам использовать переменную tester в поле формы.Но не могли бы вы вставить код, как вы используете переменную тестера в частичной форме.

Я твердо верю, что

<%= tester.to_s %>
не должно вызывать каких-либо проблем, поскольку отображает только значение этой переменной
...