我的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的答案仍然喜欢所有的评论
答案 0 :(得分:3)
我会通过:locals
发送评论:
<%= render :partial => 'comments/like_button', :locals => { :comment => comment } %>
然后你可以在你的部分中引用comment
。
你还必须对@targetable
做一些事情,但我不知道它是什么或它应该来自哪里(这是IMO使用targetable
的充分理由而不是@targetable
)。