Rails在帖子的索引页面上执行操作(投票)

时间:2013-12-27 23:41:19

标签: ruby-on-rails ruby ajax ruby-on-rails-4

我的rails应用程序有设计(帖子),其中有评论,这些评论可以被喜欢(投票)。

要在Design show页面上显示这些注释,我的DesignsController看起来像:

def show
  @comments = @design.comments
end

现在,在视图中,我有一个每个块列出每个注释,但这已被放入ajax的部分。

每个块的部分看起来像这样(我会简化)

<% @design.comments.each do |comment| %>
   <%= comment.body %>
   <p class="comment_vote">
     <%= render("comments/like_button") %>
   </p>
<% end %>

这是like_button partial:

<% if current_user.voted_on?(@comment) %>
  <%= link_to polymorphic_path([@targetable, @comment.design, @comment], action: :unlike), :method => :post, :class => ("liked" if current_user.voted_on?(@comment)), :remote => true do %>
    Unlike
  <% end %>
<% else %>
  <%= link_to polymorphic_path([@targetable, @comment.design, @comment], action: :like), :method => :post, :remote => true do %>
    Like
  <% end %>
<% end %>

正如你所看到的,like按钮也是另一个部分,它要求我使用全局变量(@comment,而不是注释)。

如果没有ajax,我可以让用户像每个评论一样,只是刷新页面,因为用户喜欢“本地变量”comment。现在我正在使用ajax,在我的like.js.coffee文件中,我必须使用一个尚未在我的控制器中定义的全局变量@comment。所以正在发生的事情是ajax工作正常并且每个评论都被喜欢,而不仅仅是用户喜欢的特定评论。任何人都可以解释这个问题并帮助我解决它吗?我宁愿使用ajax然后页面刷新。

一如既往地谢谢

修改 来自@muistooshort的答案仍然喜欢所有的评论

1 个答案:

答案 0 :(得分:3)

我会通过:locals发送评论:

<%= render :partial => 'comments/like_button', :locals => { :comment => comment } %>

然后你可以在你的部分中引用comment

你还必须对@targetable做一些事情,但我不知道它是什么或它应该来自哪里(这是IMO使用targetable的充分理由而不是@targetable)。