前提・実現したいこと
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 %>を反映させる方法が見つかりませんでした...
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/27 10:35