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
| 归档时间: |
|
| 查看次数: |
7864 次 |
| 最近记录: |