現在Railsでポートフォリオを作成しています。
いいね機能を実装したところ一部条件下で上手く動作しないという不具合が生じています。
発生している問題:マイページのお気に入りタブ内で、自分が投稿したものだけいいね機能が上手く作動しない。
なぜこのような挙動になるのかご教授願います。
該当のソースコード
view
1#show.html.erb 2 3<div class="container"> 4 <div class="row align-items-center justify-content-center"> 5 <aside class="col-md-6"> 6 <section class="user_info"> 7 <h1> 8 <% if @user.profile_picture? %> 9 <%= image_tag (@user.profile_picture.url) %> 10 <% else %> 11 <%= image_tag "/assets/default.jpg", :size => '250x250' %> 12 <% end %> 13 <%= @user.name %> 14 </h1> 15 </section> 16 </aside> 17 <aside class="col-md-6"> 18 <%= button_to 'プロフィール編集', profile_edit_path, method: :get, class: "btn btn-primary btn-outline-primary btn-round" %> 19 </aside> 20 </div> 21 22 <div class="row align-items-center justify-content-center"> 23 <aside class="col-md-12"> 24 <span class="introduction"><%= @user.introduction %></span> 25 </aside> 26 </div> 27 28 <hr width="100%"> 29 30 <div class="row select-bar align-items-center justify-content-center"> 31 <aside class="col-md-12 select-bar"> 32 <ul class="nav nav-pills nav-justified"> 33 <li class="nav-item"> 34 <a href="#toukou" class="nav-link active" data-toggle="tab">自分の投稿</a> 35 </li> 36 <li class="nav-item"> 37 <a href="#okiniiri" class="nav-link" data-toggle="tab">お気に入り</a> 38 </li> 39 </ul> 40 41 <div class="tab-content"> 42 <div class="tab-pane active" id="toukou"> 43 <div class="row text-center"> 44 <% @jiros.each do |jiro| %> 45 <div class="col-lg-3 col-md-6 mb-4"> 46 <div class="card-body"> 47 <%= link_to jiro, class: "card" do %> 48 <%= image_tag jiro.picture.url, :size => '245x200' %> 49 <h4 class="card-title"> 50 <% if jiro.store_id %> 51 <%= Store.find_by_id(jiro.store_id)&.name %> 52 <% else %> 53 <%= "店舗情報なし" %> 54 <% end %> 55 </h4> 56 <% end %> 57 <%= render partial: 'jiros/jiros', locals: { jiro: jiro } %> 58 </div> 59 </div> 60 <% end %> 61 </div> 62 <%= paginate @jiros %> 63 </div> 64 65 <div class="tab-pane" id="okiniiri"> 66 <!-- <div class="tab-pane active" id="toukou"> --> 67 <div class="row text-center"> 68 <% @favorites.each do |jiro| %> 69 <div class="col-lg-3 col-md-6 mb-4"> 70 <div class="card-body"> 71 <%= link_to jiro, class: "card" do %> 72 <%= image_tag jiro.picture.url, :size => '245x200' %> 73 <h4 class="card-title"> 74 <% if jiro.store_id %> 75 <%= Store.find_by_id(jiro.store_id)&.name %> 76 <% else %> 77 <%= "店舗情報なし" %> 78 <% end %> 79 </h4> 80 <% end %> 81 <%= render partial: 'jiros/jiros', locals: { jiro: jiro } %> 82 </div> 83 </div> 84 <% end %> 85 </div> 86 <%= paginate @favorites %> 87 </div> 88 </div> 89 </aside> 90 </div> 91</div>
controller
1#users.controller 2 3class UsersController < ApplicationController 4 def index 5 @jiros = Jiro.all 6 @jiros = Jiro.page(params[:page]).per(8) 7 end 8 9 def new 10 end 11 12 def edit 13 @user = current_user 14 end 15 16 def show 17 @user = current_user 18 # @jiros = Jiro.all 19 @jiros = Jiro.where(user_id: @user.id) 20 @jiros = Kaminari.paginate_array(@jiros).page(params[:page]).per(8) 21 @j = current_user.favorites.select("jiro_id") 22 @favorites = Jiro.where(id: @j) 23 @favorites = Kaminari.paginate_array(@favorites).page(params[:page]).per(8) 24 end
controller
1#favorites.controller 2 3class FavoritesController < ApplicationController 4 before_action :set_variables 5 6 def like 7 like = current_user.favorites.new(jiro_id: @jiro.id) 8 like.save 9 end 10 11 def unlike 12 like = current_user.favorites.find_by(jiro_id: @jiro.id) 13 like.destroy 14 end 15 16 private 17 18 def set_variables 19 @jiro = Jiro.find(params[:jiro_id]) 20 @id_name = "#like-link-#{@jiro.id}" 21 end 22 23 24end 25 26 27 private 28 #ストロングパラメーター 29 def user_params 30 params.require(:user).permit(:name, :email, :profile_picture, :password, :password_confirmation, :introduce) 31 end 32 33end
partial
1#_jiros.html.erb 2 3<%= render 'favorites/favorite', jiro: jiro %>
partial
1#favorite.html.erb 2 3<div class="like-link" id="like-link-<%= jiro.id %>"> 4 <% if current_user.favorites.find_by(jiro_id: jiro.id) %> 5 <%= link_to unlike_path(jiro.id), method: :delete, remote: true do %> 6 <div class = "iine__button">❤️<%= jiro.favorites.count %></div> 7 <% end %> 8 <% else %> 9 <%= link_to like_path(jiro.id), method: :post, remote: true do %> 10 <div class = "iine__button">♡️<%= jiro.favorites.count %></div> 11 <% end %> 12 <% end %> 13</div>
js
1#like.js.erb 2 3$("<%= @id_name %>").html('<%= j(render partial: "favorites/favorite", locals: { jiro: @jiro } ) %>');
js
1#unlike.js.erb 2 3$("<%= @id_name %>").html('<%= j(render partial: "favorites/favorite", locals: { jiro: @jiro } ) %>');
試したこと
・pry-byebugを使ってデバッグし値が入っているか確認しましたが、想定される値は入っていた。
・logをたどると、いいねボタンを押すとビューは変わらないが裏側の処理は走っていた。
補足情報(FW/ツールのバージョンなど)
Rails 5.2.4.2
ruby 2.6.3
あなたの回答
tips
プレビュー