0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[Rails]has_many関連付けを用いた際にNoMethodErrorが出る原因

Last updated at Posted at 2025-03-22

はじめに

railsでデータベースのリレーションを行うためにhas_many、belongs_toを用いたところ「NoMethodError」が発生したため備忘録として記録します。

エラー発生部分

movie.rb
class Movie < ApplicationRecord
    has_many :schedule
end
schedule.rb
class Schedule < ApplicationRecord
    belongs_to :movie
end

MovieテーブルとScheduleテーブルを1対多(1つの映画に複数の上映スケジュールがある)で対応させるためにhas_many、belongs_toで対応させてテストしたところ、「movie.schedules」の部分で以下のエラーが発生しました。

NoMethodError: undefined method `schedules' for

原因

has_many関連付けの相手となるモデルの名前が複数形になっていなかったことが原因でした。

今回の場合、Movieモデルの相手となるScheduleモデルの表記方法を以下のようにすることで、scheduleメソッドを問題なく呼び出せるようになりました。

movie.rb
class Movie < ApplicationRecord
    has_many :schedules
end

なお、belongs_to関連付けで指定するモデル名は必ず「単数系」にする必要があります。

「Railsは関連付けの名前から自動的にモデルのクラス名を推測するため、関連付け名が複数形になっていると推測されるクラス名も複数形の誤った形になってしまう」
ことが理由のようです。


参考記事:Railsガイド Active Record の関連付け

まとめ

belongs_to関連付けで指定するモデルは「単数形」、has_many関連付けで指定するモデルは「複数形」にすることを確認する必要があると理解することができました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?