Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 为什么我的render partial调用没有给我对局部变量的正确访问权?_Ruby On Rails_Ruby On Rails 3 - Fatal编程技术网

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
选项。谢谢你的努力。