Railsでいいね機能 非同期通信実装中のエラーについて
解決したいこと
Ruby on Railsでいいね機能を非同期通信しようとしています。
その中で、以下のスクショのようなエラーが出てきて詰まっております。
エラーの解決方法を教えてください。
発生している問題・エラー
該当するソースコード
#favoriteフォルダ _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 %>
#favoriteコントローラー
class FavoritesController < ApplicationController
before_action :authenticate_user!
before_action :set_book
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
private
def set_book
@book = Book.find(params[:book_id])
end
end
#usersコントローラー
class UsersController < ApplicationController
before_action :correct_user, only: [:edit, :update]
def show
@user = User.find(params[:id])
@books = @user.books.page(params[:page])
@book = Book.new
end
def edit
@user = User.find(params[:id])
end
def update
@user = User.find(params[:id])
if @user.update(user_params)
flash[:notice] = "You have updated user successfully."
redirect_to user_path
else
render :edit
end
end
def index
@users = User.all.includes(:user)
@book = Book.new
@user = current_user
end
private
def user_params
params.require(:user).permit(:name, :image, :introduction)
end
def correct_user
@user = User.find(params[:id])
unless @user == current_user
redirect_to user_path(current_user.id)
end
end
end
#bookモデル
class Book < ApplicationRecord
belongs_to :user
has_many :book_comments, dependent: :destroy
has_many :favorites, dependent: :destroy
validates :title, presence: true
validates :body, presence: true, length: { maximum: 200 }
def favorited_by?(user)
favorites.where(user_id: user.id).exists
end
end
#users/show.html.erbでのrenderの記載
<%= render 'favorites/favorite', book: @books %>
自分で試したこと
ここに問題・エラーに対して試したことを記載してください。
bookモデルにある
def favorited_by?(user)
favorites.exists(user_id: user.id)
end
↓
def favorited_by?(user)
favorite.where(user_id: user.id).exists?
end
に変更いたしました。
favoriteコントローラーに以下の2つを記述しました。
before_action :set_book
private
def set_book
@book = Book.find(params[:book_id])
end
初心者で、まだまだ理解が深まっていないですが、どうかよろしくお願いいたします。