如何将数据传递给部分?

Ric*_*sta 5 ruby ruby-on-rails

K伙计们,所以我创建了这个上/下投票脚本(基本上就像stackoverflow上的那个),我正在尝试添加一些Ajax,以便每次投票时页面都不会重新加载.

我有两个控制器,一个叫做研磨机,一个叫投票.(磨床基本上是帖子)

所以这里是所有研磨机的索引(看起来像这样) 截图.

这是该页面的代码.

</head>
<body>
 <h1>Listing grinders</h1>

 <%= render(:partial => "grinders/grinders")%>
<br />

<%= link_to 'New grinder', new_grinder_path %>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

这就是我在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 %>
Run Code Online (Sandbox Code Playgroud)

但每当我尝试投票时,我都会收到以下错误:

当你没想到它时,你有一个零对象!您可能期望一个Array实例.评估nil.each时发生错误 错误的屏幕截图. 我已经尝试了很多东西,而我却无法让它发挥作用!(更大的截图 - http://grab.by/7bgb)

有帮助吗?如果您需要更多信息,请询问!

Swa*_*and 17

要将数据传递给partial,请使用该locals选项.

<%= render(:partial => "grinders/grinders", :locals => {:grinders => @grinders})%>
Run Code Online (Sandbox Code Playgroud)

然后在你的部分中,参考它grinders而不是@grinders.

但是,由于您在此处渲染集合,因此这是呈现集合的惯用方法:

<%= render :collection => @grinders %>
Run Code Online (Sandbox Code Playgroud)

这将查找名为'grinder.erb'的部分,并且将传递给partial的局部变量将是grinder(集合的奇异名称).有了这个,你实际上可以摆脱部分中的循环语句.您也可以使用自定义名称,my_grinder并将具有相同名称的局部变量传递给partial.

要了解更多信息,请访问:http://guides.rubyonrails.org/layouts_and_rendering.html