0

複数の投稿があるページがあります。ユーザーが投票した後に各投稿の投票を更新し、ページをリロードする必要がないようにしたいと思います。私はよく調べましたが、この問題に遭遇したほとんどの人は、ページにパーシャルを 1 つしか持っていないため、パーシャルを含む div の ID を使用できます。

Ajax と jQuery を使用してみましたが、引き続き問題が発生します。現在、投票は正しく更新されていますが、1 つのリンクのすべてのパーシャルが変更されています。各パーシャルに動的 ID を設定しようとしましたが、@post 変数が最後の投稿に設定されているため、最初の ID のみが変更されます。したがって、3 番目の投稿に投票したとしても、3 番目の投稿ではなく、最初の投稿のパーシャルが変更されます。

私はレール3.2.14とルビー2.0を使用しています

これが私のコードです:

投稿/index.html.erb

<% all_posts.each do |post| %>
  <div class="votes-box">
    <%= render partial: 'vote', locals: {post: post}  %>
  </div>
<% end %>

posts/_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 %>");

posts_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
4

1 に答える 1