渲染部分:collection => @array指定variables名称

我正在渲染一个这样的部分:

$("#box_container").html("<%= escape_javascript( render :partial => 'contacts/contact_tile', :collection => @contacts) %>") 

问题是我的部分期望variables“联系”。

 ActionView::Template::Error (undefined local variable or method `contact' 

我只是想告诉部分期望一个可变的contact 。 应该通过@contacts作为contact进行迭代。 我怎么做?

发现这也是从文档的帮助。 您不限于以部分命名后的variables:

http://guides.rubyonrails.org/layouts_and_rendering.html

要在部分中使用自定义局部variables名称,请在调用partial中指定:as选项:

 <%= render :partial => "product", :collection => @products, :as => :item %> 

通过这个改变,你可以访问@products集合的一个实例作为局部variables中的项目局部variables。

http://guides.rubyonrails.org/layouts_and_rendering.html上的文档说:;

当使用复数集合调用局部时,局部的各个实例可以通过局部后面命名的variables访问正在渲染的集合的成员。

所以它会传递一个名为“contact_tile”而不是“contact”的variables。 也许你可以重新命名你的部分。

如果这个命名很重要,你可以通过类似的方式明确地做到这一点:

 @contacts.each { |contact| render :partial => 'contacts/contact_tile', :locals => {:contact => contact } } 

最新的语法是:

index.html.erb

 <%= render partial: "product", collection: @products %> 

_product.html.erb

 <p>Product Name: <%= product.name %></p> 

@products部分用作product

其中@products可以被认为是Product.allproduct可以被认为是一行产品,即Product.first作为一个循环的所有产品。