0

在我的Home#Index页面上,我有这个:

  <%= render 'home/popular_products', :collection => @products, :as => :product %>

在我Home#_popular_products看来,我有这个:

<div class="span2 recommended">
  <%= image_tag product.image_url(:thumb).to_s %>
</div>

这是我不断收到的错误:

undefined local variable or method `product' for #<#<Class:0x007f871c4f6848>:0x007f871cdb7e28>

据我了解,我什至不必:as在我的语句中指定属性render- 但我尝试在使用后明确这一点是:collection => @products行不通的。

在我的Home#Index Controller我有这个:

@products = Product.all.sample(6)

想法?

4

2 回答 2

1

:partial如果您想传递任何其他选项,我相信您必须指定该选项。IE:

<%= render :partial => 'home/popular_products', :collection => @products, :as => :product %>

应该管用。

于 2012-11-16T04:55:38.533 回答
0

你把_popular_products.html.erb文件放在你的app/views/home/? 我认为您使用的是部分不遵循 Rails 的约定,因此 Rails 的product变量无法理解。_product.html.erb如果你想这样使用,你的部分应该被命名。有了这个部分,你可以这样写:

<%= render @products %>

更新

解决方案 1

索引页面:

<%= render 'popular_products', :collection => @products %>

部分的:

<%= image_tag popular_products.image_url(:thumb).to_s %>

解决方案 2

索引页面:

<% @products.each do |product| %>
  <%= render :partial => "popular_products", :locals => { :product => product } %>
<% end %>

部分的:

<%= image_tag product.image_url(:thumb).to_s %>
于 2012-11-16T04:29:51.720 回答