我有一个包含多个帖子的页面。我希望每个帖子的投票在用户投票后更新,而不必重新加载页面。我看了又看,但是大多数遇到这个问题的人在页面上只有一个部分,所以他们可以只使用部分包含 div 的 id。
我尝试过使用 Ajax 和 jQuery,但一直遇到问题。现在,投票正确更新,但它改变了一个链接上的所有部分。我尝试为每个部分设置一个动态 id,但它只更改第一个,因为 @post 变量被设置为最后一个帖子。所以,即使我对第三个帖子投了票,第一个帖子的部分内容也会改变,而不是第三个。
我在 rails 3.2.14 和 ruby 2.0
这是我的代码:
帖子/index.html.erb
<% all_posts.each do |post| %>
<div class="votes-box">
<%= render partial: 'vote', locals: {post: post} %>
</div>
<% end %>
帖子/_vote.html.erb
<%= link_to '', vote_post_path(post, type: 'up' ), remote: true, method: 'post', class: 'upvote' %>
<div class="vote-rep"><%= post.reputation_for(:votes).to_i %> Rep</div>
<%= link_to '', vote_post_path(post, type: 'down' ), remote: true, method: 'post', class: 'downvote' %>
投票.js.erb
$(".votes-box").html("<%= escape_javascript(render partial: 'vote', locals: {post: @post}).html_safe %>");
post_controller.rb
def vote
value = params[:type] == 'up' ? 1 : -1
@post = Post.find(params[:id])
@post.add_or_update_evaluation(:votes, value, current_user)
respond_to do |format|
format.js
end
end