前提・実現したいこと
実現したいこと
イイね機能の追加。
質問の内容
コメント機能を実装しているのですが、その際イイね機能を付けたいと思い、実装しています。
ルーティング、モデル、コントローラ、ビューを記載してアプリを立ち上げた際に、モデル部分でエラーがでました。
使用しているモデル
belongs_to =>customer (モデル)
has_many => post(モデル)
Favoriteモデル
発生している問題・エラーメッセージ
NameError in Posts#show
エラーメッセージ undefined local variable or method `favorites' for #<Post:0x00007f972a7f4108> Did you mean? favorited_by? ### 該当のソースコード has_many :post_comments, dependent: :destroy def favorited_by?(customer) favorites.where(customer_id: customer.id).exists? end end ```ここに言語名を入力 ruby on rails ソースコード
試したこと
モデルの名前チェックやスペルミスをチェックしました。
補足情報(FW/ツールのバージョンなど)
・Favoriteモデルの記述
lass Favorite < ApplicationRecord
belongs_to :customer
belongs_to :post
end
・postモデルの記述
class Post < ApplicationRecord
belongs_to :customer
attachment :image
has_many :post_comments, dependent: :destroy
def favorited_by?(customer)
favorites.where(customer_id: customer.id).exists?
end
end
・ post customer モデル
class Customer < ApplicationRecord
Include default devise modules. Others available are:
:confirmable, :lockable, :timeoutable, :trackable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
ratyrate_rater has_many :posts, dependent: :destroy has_many :post_comments, dependent: :destroy has_many :favorites, dependent: :destroy
end
・ルーティング 設定
resources :posts, only: [:new, :create, :index, :show] do
resource :favorites, only: [:create, :destroy]
resource :post_comments, only: [:create]
end
・スキーマ
・post
create_table "posts", force: :cascade do |t|
t.text "town_name"
t.string "image_id"
t.text "comment"
t.integer "customer_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
・favorite
create_table "favorites", force: :cascade do |t|
t.integer "customer_id"
t.integer "post_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
・コントローラ
.Favorite
class FavoritesController < ApplicationController
def create
post = Post.find(params[:post_id])
favorite = current_customer.favorites.new(post_id: post.id)
favorite.save
redirect_to post_path(post)
end
def destroy
post = Post.find(params[:post_id])
favorite = current_customer.favorites.find_by(post_id: post.id)
favorite.destroy
redirect_to post_path(post)
end
end
end
よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/17 06:34
2020/05/17 06:36
2020/05/17 06:46