我有两个控制器,一个叫做研磨器,一个叫投票。 (磨床基本上都是帖子)
所以这里是所有研磨者的索引(看起来像这样)
这是该页面的代码。
</head>
<body>
<h1>Listing grinders</h1>
<%= render(:partial => "grinders/grinders")%>
<br />
<%= link_to 'New grinder', new_grinder_path %>
</body>
</html>
这就是我在views / grinders / _grinders.erb
中的内容<% @grinders.each do |grinder| %>
<div id="main">
<div style="float:left; height:80px; width:50px">
<div class='up'>
<% form_for(@vote, :remote => true) do |u|%>
<%= u.hidden_field :grinder_id, :value => grinder.id %>
<%= u.hidden_field :choice, :value => "up" %>
<%= image_submit_tag("http://i13.photobucket.com/albums/a287/Rickmasta185/arrow-small-green-up.png", :class => 'create') %>
<% end %>
</div>
<center><%= grinder.votes_sum %></center>
<div class='down'>
<% form_for(@vote, :remote => true) do |d|%>
<%= d.hidden_field :grinder_id, :value => grinder.id %>
<%= d.hidden_field :choice, :value => "down" %>
<%= image_submit_tag("http://i13.photobucket.com/albums/a287/Rickmasta185/arrow-small-red-down.png", :class => 'create') %>
<% end %>
</div>
</div>
<div class='box' >"<strong>It grinds our gears </strong><%=h grinder.grinder %>"</div>
</div>
</div>
<% end %>
但每当我尝试投票时,我都会收到以下错误:
当你没想到它时,你有一个零对象! 您可能期望一个Array实例。 评估nil.each时发生错误 我已经尝试了很多东西,而我却无法让它发挥作用! (更大的截图 - http://grab.by/7bgb)
有任何帮助吗?如果您需要更多信息,请询问!
答案 0 :(得分:17)
要将数据传递给部分,请使用locals
选项。
<%= render(:partial => "grinders/grinders", :locals => {:grinders => @grinders})%>
然后在您的部分内容中,将其称为grinders
而不是@grinders
。
但是,由于您在此处渲染集合,因此这是呈现集合的惯用方法:
<%= render :collection => @grinders %>
这将查找名为'grinder.erb'的部分,并且将传递给partial的局部变量将是grinder
(集合的奇异名称)。有了这个,你实际上可以摆脱部分中的循环语句。您也可以使用自定义名称,例如my_grinder
,并将具有相同名称的本地变量传递给部分名称。
要了解更多信息,请仔细阅读:http://guides.rubyonrails.org/layouts_and_rendering.html
答案 1 :(得分:2)
在Rails 3中就像这样
<强> index.html.erb 强>
<h1>Products</h1>
<%= render :partial => 'product', :collection => @products %>
<强> _product.html.erb 强>
<p>Product Name: <%= product.name %></p>
当使用复数集合调用partial时,partial的各个实例可以访问通过以partial命名的变量呈现的集合的成员。在这种情况下,partial是_product,在_product partial中,您可以引用product来获取正在呈现的实例
答案 2 :(得分:0)
尝试<%= render(:partial => "grinders/grinders", :object => @grinders) %>
答案 3 :(得分:0)
看起来你的投票#create动作试图处理“grinders / _grinders.html.erb”部分,这很奇怪,因为AJAX调用可能只输出JS或JSON。
您能告诉我们文件的内容: