Ruby on rails 为什么我的render partial调用没有给我对局部变量的正确访问权?
在我的Ruby on rails 为什么我的render partial调用没有给我对局部变量的正确访问权?,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,在我的主页#索引页面上,我有以下内容: <%= render 'home/popular_products', :collection => @products, :as => :product %> <div class="span2 recommended"> <%= image_tag product.image_url(:thumb).to_s %> </div> @products = Product.all.sa
主页#索引
页面上,我有以下内容:
<%= render 'home/popular_products', :collection => @products, :as => :product %>
<div class="span2 recommended">
<%= image_tag product.image_url(:thumb).to_s %>
</div>
@products = Product.all.sample(6)
这就是我一直遇到的错误:
undefined local variable or method `product' for #<#<Class:0x007f871c4f6848>:0x007f871cdb7e28>
想法?您是否将
\u popular\u products.html.erb
文件放入您的应用程序/视图/主页/
?我认为您使用的是部分不遵循rails的约定,因此rails是不可理解的product
变量。如果您想这样使用,您的分部代码应该命名为\u product.html.erb
。有了这个部分,你可以这样写:
<%= render @products %>
更新
解决方案1
索引页:
<%= render 'popular_products', :collection => @products %>
<% @products.each do |product| %>
<%= render :partial => "popular_products", :locals => { :product => product } %>
<% end %>
@products%>
部分:
<%= image_tag popular_products.image_url(:thumb).to_s %>
解决方案2
索引页:
<%= render 'popular_products', :collection => @products %>
<% @products.each do |product| %>
<%= render :partial => "popular_products", :locals => { :product => product } %>
<% end %>
“热门产品”,:locals=>{:product=>product}%>
部分:
<%= image_tag product.image_url(:thumb).to_s %>
如果您想传入任何其他选项,我相信您必须指定
:partial
选项。即:
<%= render :partial => 'home/popular_products', :collection => @products, :as => :product %>
“家庭/流行产品”,:collection=>@products,:as=>:product%>
应该可以用。我不一定要使用
render@products
。我只想让部分可以用。这就是为什么我使用完整调用来提供部分的完整路径,即@products,:as=>:product%>
。是的,据我所知,\u popular\u products.html.erb
在我的app/views/home/
中,在:collection
调用中指定的实例变量不应该已经在控制器中初始化了吗?我的是。我错过了什么?不…那不行。仍然给我同样的错误,除了现在它说未定义的局部变量或方法'popular#
对不起,对于解决方案1,您的变量应该是popular#products
不。。。安德鲁指出了我遇到的问题。我在渲染
调用中缺少:partial
选项。谢谢你的努力。