railsアプリにいいね機能を実装しました。
しかし、いいねボタンを押した後にすぐに色が反映されません。
ターミナルはきちんと動いていていて、createされているのですが、リロードしないと色がついていないという状況です。
(クラスをjsによって入れ替えたいです)
実装の際に参考にした記事
[Rails]いいね機能の非同期での実装!!!
##コード
↓viewになります
<span id="work-<%= @work.id %>-like1"> <%= render 'shared/likes', work: @work, like: @like %> </span>
↓viewに入っている部分テンプレートになります。
<% if user_signed_in? %> <% if work.like_user(current_user.id) %> <%= button_to work_like_path(work), class: "fav", method: :delete, remote: true do %> <i class="fas fa-heart"></i> <span> <%= work.likes_count %> </span> <% end %> <% else %> <%= button_to work_like_path(work), class: "fav", remote: true do %> <i class="far fa-heart"></i> <span> <%= work.likes_count %> </span> <% end %> <% end %> <% else %> <i class="far fa-heart"></i> <span> <%= work.likes_count %> </span> <% end %>
↓create.js.erbになります。
$("#work-<%= @work.id %>-like").html("<%= j(render 'likes/likes', work: @work, like: @like) %>")
↓destroy.js.erbになります。
$("#work-<%= @work.id %>-like").html("<%= j(render 'likes/likes', work: @work, like: @like) %>")
↓likes_controllerになります。
class LikesController < ApplicationController def create @work = Work.find(params[:work_id]) @like = Like.create(user_id: current_user.id, work_id: params[:work_id]) @work.reload end def destroy @work = Work.find(params[:work_id]) @like = Like.find_by!(user_id: current_user.id, work_id: params[:work_id]).destroy! @work.reload end end
##ターミナル
viewでいいねボタンを押した時の挙動になります。
この時点でページのリロードはしていません。
この時点で色を反映させたいです(クラスをjsによって入れ替えたい)。
##試したこと
turbolinksの削除
ご教授いただけると幸いです。
足りない情報などありましたら教えていただきたいです????♂️
追記です。jsが発火しているかconsole.logで確認したのですが、反映されています。
create.js.erbの1行目にconsol.logを入れると反応、最終行に入れるとせず、1行目&最終行の両方に入れるとどちらも反応する
といった状況です。
jsコンソールに「rails-ujsとjquery-ujsがダブっているのでrails-ujsのみを使用しろ」というエラーが出ていました。指示通りにjquery-ujsを消したのでエラー自体は解消したのですが、根本の問題はいまだ解決できず、という状況です。
####追記です。modelを追記しました。
work.rb
def like_user(user_id) likes.find_by(user_id: user_id) end
like.rb
class Like < ApplicationRecord belongs_to :work, counter_cache: :likes_count belongs_to :user end
あなたの回答
tips
プレビュー