我有一个应用程序,您可以发布Links
。每个Link
has_many Comments
我已经设置了ajax,用户可以在其中提出特定评论。目前,用户可以在第一次通过ajax成功提交评论,但是如果用户然后尝试在同一页面上对不同的评论进行投票,那么ajax会中断,并且在页面刷新之前该值不会更新。
comments_controller.rb:
def comment_upvote
@comment = Comment.find(params[:id])
@link = Link.where(id: @comment.link_id)
@comment.upvote_by current_user
respond_to do |format|
format.html {redirect_to link_path(@link)}
format.js {}
end
end
视图/评论/ _comment.html.erb:
<div class="well">
<h2><%= comment.title %></h2>
<p class="text-muted">Added by <strong><%= comment.author %> <%= comment.author_last_name %></strong> on
<%= l(comment.created_at, format: '%B, %d %Y %H:%M:%S') %></p>
<blockquote>
<p><%= comment.body %></p>
</blockquote>
<p><%= link_to 'reply', new_comment_path(parent_id: comment.id, link_id: @link.id) %></p>
<%= link_to pointup_comment_path(comment.id), method: :put, remote: true do %>
+
<% end %>
<div id="comment-votes">
Votes: <%= comment.get_upvotes.size %>
</div>
视图/评论/ comment_upvote.js.erb:
$('#comment-votes').html("<%= j render "upvotes", locals: { @comment => @comment } %>")
视图/评论/ _upvotes.html.erb:
Votes: <%= @comment.get_upvotes.size %>
有没有一种简单的方法可以解决这个问题?如果您需要额外的细节,请告诉我。
答案 0 :(得分:2)
这里的问题是有许多标识为comment-votes
的div。当你试图通过id
获取元素时,它总是得到相同的div。
要解决此问题,您需要为每条评论设置id
唯一。
<强>视图/评论/ _comment.html.erb:强>
<div id="comment-votes-<%= comment.id %>">
Votes: <%= comment.get_upvotes.size %>
</div>
设置唯一注释ID后。您只需要更改ajax调用。
<强>视图/评论/ comment_upvote.js.erb:强>
$("#comment-votes-<%= @comment.id %>").html("<%= j render "upvotes", locals: { @comment => @comment } %>")