Rails いいね 非同期通信 いいね押してもいいねされた表示がない
解決したいこと
Ruby on Railsでいいね機能を非同期通信しようとしています。
特にエラーもはかれていないのですが、いいねを押しても非同期で押したことにされず、画面遷移をする事で、押したことになり、いいねの色が付きます。
裏側では、いいねされているらしいのですが、画面遷移しなくても、いいねされたような見た目にしたいです。
よろしくお願いいたします、解決方法を教えて下さい。
発生している問題・エラー
一番上の投稿をいいねすると、特に何も変わらす画面遷移をすることで、
このようにいいねをされる状況でございます。
該当するソースコード
#favoriteコントローラー
class FavoritesController < ApplicationController
before_action :authenticate_user!
def create
@book = Book.find(params[:book_id])
favorite = current_user.favorites.new(book_id: @book.id)
favorite.save
end
def destroy
@book = Book.find(params[:book_id])
favorite = current_user.favorites.find_by(book_id: @book.id)
favorite.destroy
end
end
#_favorite.html.erb
<% if book.favorited_by?(current_user) %>
<%= link_to book_favorites_path(book), method: :delete, remote: true, class:'text-danger' do %>
<i class="fas fa-heart"></i><%= "#{book.favorites.count}" %>
<% end %>
<% else %>
<%= link_to book_favorites_path(book), method: :post, remote: true, class:'text-primary' do %>
<i class="fas fa-heart"></i><%= "#{book.favorites.count}" %>
<% end %>
<% end %>
#users/show.html.erb
<% @books.each do |book| %>
<tr>
<td>
<%= link_to user_path(book.user) do %>
<%= image_tag book.user.get_profile_image(80,80) %>
<% end %>
</td>
<td><%= link_to book.title, book_path(book) %></td>
<td><%= book.body %></td>
<td>
<div id="favorite_btn_<%= book.id %>">
<%= render 'favorites/favorite', book: book %>
</div>
</td>
<td>
<%= "コメント数:#{book.book_comments.count}" %>
</td>
</tr>
<% end %>
#create.js.erb
$('#favorite_btn_<%= @book.id %>').html("<%= j(render partial: 'favorites/favorite', locals: {book: @book}) %>");
#destroy.js.erb
$('#favorite_btn_<%= @book.id %>').html("<%= j(render partial: 'favorites/favorite', locals: {book: @book}) %>");
自分で試したこと
html.erbのファイルの中の、
<div id="favorite_btn_<%= book.id %>">
<% render ~~~~~~ %>
</div>
上記の
<div id=
の部分をを付け足しました。
まだまだ、初学者ですが、よろしくお願いいたします。
0