前提・実現したいこと
Railsで投票アプリを作成中です。
お題一覧ページに各選択肢の投票数を非同期通信で実装したいです。
現状、投票ボタンを押すと投票前、投票後でアイコンは入れ替わるのですが、リロードするか再度投票ボタンをクリックしないと投票数が変わりません。
クリック一回で投票数を更新したいです。お力添えお願いいたします。
キャプチャ画像
該当のソースコード
ruby
1class VotesController < ApplicationController 2 before_action :set_choice 3 4 def create 5 @vote = Vote.new(vote_params) 6 @already_vote = Vote.find_by(content_id: @vote.content_id) 7 overlap_adjustment 8 @votes = Vote.where(choice_id: @choice.id) 9 @choices = Choice.all 10 end 11 12 def destroy 13 vote = Vote.find_by(vote_params) 14 vote.destroy 15 @votes = Vote.where(choice_id: @choice.id) 16 @choices = Choice.all 17 end 18 19 private 20 def vote_params 21 params.permit(id: @choice.id).merge(user_id: current_user.id, content_id: @choice.content_id, choice_id: @choice.id) 22 end 23 24 def set_choice 25 @choice = Choice.find(params[:id]) 26 end 27 28 def overlap_adjustment 29 if @already_vote == nil 30 @vote.save 31 elsif @vote.user_id == current_user.id && @vote.content_id == @already_vote.content_id 32 @already_vote.destroy 33 @vote.save 34 else 35 @vote.save 36 end 37 end 38end
app/views/contents/_main.html.haml
ruby
1#vote{id: choice.id} 2 = render partial: "vote", locals: { content: content, choice: choice }
app/views/contents/_vote.html.haml
ruby
1- if user_signed_in? 2 - if choice.vote_user(current_user.id) 3 = button_to choice_vote_path(id: choice.id, choice_id: choice.id), method: :delete, id: "vote-btn", remote: true do 4 ● 5 %span 6 = choice.votes_count 7 8 - else 9 = button_to choice_votes_path(id: choice.id, choice_id: choice.id), id: "vote-btn", remote: true do 10 ○ 11 %span 12 = choice.votes_count 13 14- else 15 ⭐️ not signin 16 %span 17 = choice.votes_count
app/views/votes/destroy.js.haml
ruby
1$("#vote_#{@choice.id}").html("#{j(render partial: 'contents/vote', locals: {id: @choice.id, choice: @choice, votes: @votes }) }")
app/views/votes/destroy.js.haml
ruby
1$("#vote_#{@choice.id}").html("#{j(render partial: 'contents/vote', locals: {id: @choice.id, choice: @choice, votes: @votes, vote: @vote, votes_count: @choice.votes_count })}");
試したこと
js.erbファイルのid部分を疑い、確認しましたが問題を見つけられませんでした。
補足情報(FW/ツールのバージョンなど)
ruby 2.6.5
ruby on rails 6.0.0
コード
あなたの回答
tips
プレビュー