在我的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)
思想?
答案 0 :(得分:1)
如果您想传递任何其他选项,我相信您必须指定:partial
选项。即:
<%= render :partial => 'home/popular_products', :collection => @products, :as => :product %>
应该工作。
答案 1 :(得分:0)
您是否在_popular_products.html.erb
中添加了app/views/home/
个文件?我认为你正在使用部分不遵循rails的约定,因此rails不理解product
变量。如果你想这样使用,你的部分应该被命名为_product.html.erb
。有了这个部分,你可以这样写:
<%= render @products %>
<强>更新强>
索引页:
<%= render 'popular_products', :collection => @products %>
部分:
<%= image_tag popular_products.image_url(:thumb).to_s %>
索引页:
<% @products.each do |product| %>
<%= render :partial => "popular_products", :locals => { :product => product } %>
<% end %>
部分:
<%= image_tag product.image_url(:thumb).to_s %>