質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

1回答

1107閲覧

モデルの箇所にエラー文が出ているのですが、解決できず投稿しました。undefined local variable or method `favorites' for #<Post:0x00007f9

Takanoj

総合スコア38

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2020/05/17 06:08

編集2020/05/17 06:36

前提・実現したいこと

実現したいこと
イイね機能の追加。

質問の内容
コメント機能を実装しているのですが、その際イイね機能を付けたいと思い、実装しています。
ルーティング、モデル、コントローラ、ビューを記載してアプリを立ち上げた際に、モデル部分でエラーがでました。

使用しているモデル
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

よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Posthas_many :favoritesの指定をし忘れているものと思われます。

投稿2020/05/17 06:27

maisumakun

総合スコア146018

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Takanoj

2020/05/17 06:34

ご連絡ありがとうございます。 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 記述してると思っています。
maisumakun

2020/05/17 06:36

これはCustomerクラスで、Postクラスは別に設定が必要です。
Takanoj

2020/05/17 06:46

ありがとうございます!!! 解決しました!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問