errorを解決していいねボタンを表示させたいです
Hamlでいいね機能を組み込んだシステムを作っています。
いいね機能を実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
NoMethodError in Halls#index Showing /Users/yuuka/projects/wedding-app/app/views/likes/_like.html.haml where line #2 raised: undefined method `like_user' for #<Hall::ActiveRecord_Relation:0x00007fd0d2843c80> Extracted source (around line #2): 1- if user_signed_in? 2 - if halls.likes_user(current_user.id)
該当のソースコード
ruby
1# app/models/hall.rb 2class Hall < ApplicationRecord 3 belongs_to :user 4 has_many :likes, dependent: :destroy 5 6 def like_user(user_id) 7 likes.find_by(user_id: user_id) 8 end 9end 10 11 12
haml
1# views/likes/_like.html.haml 2 3- if user_signed_in? 4 - if halls.like_user(current_user.id) 5 .hall__name__dislike 6 =link_to user_hall_like_path(current_user, hall, like), method: "DELETE", remote: true do 7 %i.fas.fa-heart 8 %span いいね! 9 %span 10 = h.likes_count 11 - else 12 .hall__name__like 13 =link_to user_hall_likes_path(current_user, hall), method: "POST", remote: true do 14 %i.fas.fa-heart 15 %span いいね! 16 %span 17 = h.likes_count 18-else 19 .hall__name__like 20 %i.fas.fa-heart 21 %span いいね! 22 %span 23 = h.like_count
ruby
1# halls_controller 2 3class HallsController < ApplicationController 4 def index 5 @halls = Hall.all 6 end 7 8end
haml
1 2# views/halls/index.html.haml 3 4hall 5 - if @halls.present? 6 - @halls.each do |h| 7 .hall__name 8 = h.name 9 = render partial: 'likes/like', locals: { halls: @halls, likes: @likes, like: @like} 10 .hall__image 11 = image_tag h.image 12 .hall__place 13 = h.place 14 .hall__link 15 = link_to top_page_index_path(current_user.id) do 16 詳細をみる
# controller/likes_controller class LikesController < ApplicationController def create @like = Like.create(user_id: current_user.id, hall_id: params[:hall_id]) @likes = Like.where(hall_id: params[:hall_id]) get_hall end def destroy @like = Like.find_by(user_id: current_user.id, hall_id: params[:hall_id]) @like.destroy @likes = Like.where(hall_id: params[:hall_id]) get_hall end def get_hall @hall = Hall.find(params[:hall_id]) end end
試したこと
- if halls.like_user(current_user.id)
hallsの中には@halls.each do |h|の情報が入っており、
current_user.idも情報が入っていますがエラーが起きます
like_userのなかに情報が入ってくれないのではないか?
補足情報(FW/ツールのバージョンなど)
このサイトを真似してみました
https://qiita.com/haruya_hamasaki/items/75d41a1aafb87408737d