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

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

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

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

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Ruby on Rails

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

JavaScript

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

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

Q&A

1回答

2748閲覧

いいね機能のカウント部分を非同期にしたい

harabou

総合スコア5

Ruby

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

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Ruby on Rails

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

JavaScript

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

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

0グッド

0クリップ

投稿2020/04/26 14:11

編集2020/04/27 10:29

前提・実現したいこと

railsで動画投稿アプリケーションを作っています。
いいね機能実装中に下記の問題が発生しました。

発生している問題・エラーメッセージ

ハートマークの非同期はできていますが、カウントとユーザーネームが押下後消えてしまいます。
![![イメージ説明]
##↓猫です3と猫です2を押下後
![イメージ

該当のソースコード

index.html.erb

ruby

1<ul class="list-unstyled"> 2 <% @posts.each do |post| %> 3 <li class="media"> 4 <%= link_to post_path(post) do %> 5 <%= video_tag post.video.to_s, :size => "360x200" %> 6 <% end %> 7 8 <div class="media-body"> 9 <%= link_to post_path(post) do %> 10 <h5 class="mt-0 mb-1"><%= post.title %></h5> 11 <% end %> 12 <%= post.body %> 13 14 <div id="like-icon-post-<%= post.id.to_s %>", style="display: flex;"> 15 <% if post.liked_by(current_user).present? %> 16 <%= link_to "いいねを取り消す", post_like_path(post.id, post.liked_by(current_user)), method: :DELETE, remote: true, class: "loved hide-text" %> 17 <% else %> 18 <%= link_to "いいね", post_likes_path(post), method: :POST, remote: true, class: "love hide-text" %> 19 <% end %> 20 <%= post.like_ids.length %> 21 <div id="like-text-post-<%= post.id.to_s %>", style="display: block; margin: 0 0 0 20px"> 22 <%= render "like_text", { likes: post.likes } %> 23 </div> 24 </div> 25 </div> 26 </li> 27 <% end %> 28</ul>

create.js.erb

ruby

1$('#like-icon-post-<%= @post.id.to_s %>'). 2 html('<%= link_to "いいね", post_like_path(@post.id, @like), method: :DELETE, remote: true, class: "loved hide-text" %>');

destroy.js.erb

ruby

1$('#like-icon-post-<%= @post.id.to_s %>'). 2 html('<%= link_to "いいねを取り消す", post_likes_path(@post), method: :POST, remote: true, class: "love hide-text" %>');

_like_text.html.erb

ruby

1<strong> 2 <% likes.each.with_index do |like, index| %> 3 <% if likes.size == 1 %> 4 <%= like.user.nickname %> </strong> が「いいね!」しました 5 <% elsif like == likes.last %> 6 </strong>and<strong> 7 <%= + like.user.nickname %></strong> が「いいね!」しました 8 <% elsif index > 1 %> 9 </strong><%= "and " + (likes.size-index).to_s + " 他 " %> が「いいね!」しました 10 <% break %> 11 <% elsif index == likes.size-2 || index == 1 %> 12 <%= like.user.nickname %> 13 <% else %> 14 <%= like.user.nickname + ", " %> 15 <% end %> 16 <% end %> 17</strong>

ハートの非同期はできているので、カウントとlike_textの部分が問題なのかと思い、Qiitaなどをみて確認してみましたが、問題がなさそうに見えます。
おそらく...単純なミスだとは思いますが、ご教授いただければと思います。

##追記 4.27

ご教授いただいた点、修正しました。
イメージ説明
###↓
イメージ説明

ruby

1<ul class="list-unstyled"> 2 <% @posts.each do |post| %> 3 <li class="media"> 4 <%= link_to post_path(post) do %> 5 <%= video_tag post.video.to_s, :size => "360x200" %> 6 <% end %> 7 8 <div class="media-body"> 9 <%= link_to post_path(post) do %> 10 <h5 class="mt-0 mb-1"><%= post.title %></h5> 11 <% end %> 12 <%= post.body %> 13 14 <div class="left-container"> 15 <div id="like-icon-post-<%= post.id.to_s %>"> 16 <% if post.liked_by(current_user).present? %> 17 <%= link_to "いいねを取り消す", post_like_path(post.id, post.liked_by(current_user)), method: :DELETE, remote: true, class: "loved hide-text" %> 18 <% else %> 19 <%= link_to "いいね", post_likes_path(post), method: :POST, remote: true, class: "love hide-text" %> 20 <% end %> 21 </div> 22 <div class="counter"> 23 <%= post.like_ids.length %> 24 </div> 25 <div class="favorite"> 26 <div id="like-text-post-<%= post.id.to_s %>" > 27 <%= render "like_text", { likes: post.likes } %> 28 </div> 29 </div> 30 </div> 31 </div> 32 </li> 33 <% end %> 34</ul>

JAVASCRIPT

1$('#like-icon-post-<%= @post.id.to_s %>'). 2 html('<%= link_to "いいね", post_like_path(@post.id, @like), method: :DELETE, remote: true, class: "loved hide-text" %>'); 3$('#like-text-post-<%= @post.id.to_s %>'). 4 html('<%= j render "posts/like_text", { likes: @post.likes } %>');

JAVASCRIPT

1$('#like-icon-post-<%= @post.id.to_s %>'). 2 html('<%= link_to "いいねを取り消す", post_likes_path(@post), method: :POST, remote: true, class: "love hide-text" %>'); 3$('#like-text-post-<%= @post.id.to_s %>'). 4 html('<%= j render "posts/like_text", { likes: @post.likes } %>');

ですが、どうしても<%= post.like_ids.length %>を反映させる方法が見つかりませんでした...

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

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

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

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

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

guest

回答1

0

create.js.erb、destroy.js.erbに<%= post.like_ids.length %>以下のコードが不足しているためではないでしょうか?

投稿2020/04/27 00:43

編集2020/04/27 02:34
no1knows

総合スコア3365

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

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

harabou

2020/04/27 10:35

ご回答ありがとうございます。 おっしゃる通りガッツリ抜けてましたので、記述致しました。 ですが、どうしても<%= post.like_ids.length %>を反映させる方法が見つからず、途方にくれています。 作業の最中に修正したindex.html.erbを戻しても関係なさそうでしたし... 上記追記にて記載しました。 もしよろしければ、何か方法をご教授いただきたいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問