为什么我的渲染部分调用不能让我正确访问局部变量?

时间:2012-11-16 04:16:48

标签: ruby-on-rails ruby-on-rails-3

在我的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)

思想?

2 个答案:

答案 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 %>

<强>更新

解决方案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 %>