代码之家  ›  专栏  ›  技术社区  ›  astjohn

rails字段\用于渲染部分,多个局部变量产生未定义的变量

  •  10
  • astjohn  · 技术社区  · 14 年前

    所有的,

    安装程序的标准字段\出现问题。在我的“表格”部分中,我有:

    <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>
    

    在“注释字段”部分中,我有常规字段,然后是测试变量:

    <%= tester.to_s %>
    

    当我移除测试变量时,一切都正常工作。一旦我添加测试变量,就会得到以下错误:

    actionView::template::error(未定义的本地变量或类的“tester”方法:0xA1F3664>:0xA1F1BD4>)

    当对多个局部变量使用字段时,是否有其他人遇到过此问题?


    更详细地说,我的“评论栏”部分如下:

    <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 回复  |  直到 13 年前
        1
  •  16
  •   Community datashaman    7 年前

    所有的,

    Hakunin 靠的是钱。我不止在一个地方打电话。第二点是我的助手方法“链接到添加域”。我用它来添加使用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  
    

    现在,我的“添加域”链接在“我的窗体部分”中调用如下:

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

    …并且我可以动态地将字段添加到我的窗体中并传递其他局部变量。希望这能帮助其他人。

        2
  •  1
  •   Cristian    13 年前

    变化:

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

    到:

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

    我也有同样的问题。

        3
  •  0
  •   Nimesh Nikum    14 年前

    我不清楚为什么您需要在表单字段中使用Tester变量。但是你能粘贴一个代码吗?你是如何使用部分形式的测试变量的?

    我坚信

    <%= tester.to_s %>
    不应生成任何问题,因为它只显示该变量的值