質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

0回答

359閲覧

いいね機能で一部Ajax不具合が生じてしまう

Eita

総合スコア0

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

0クリップ

投稿2020/04/27 12:07

現在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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問