はじめに
DM機能を実装中に
undefined method 'has_many' for main:Object
という見たことがなかったエラーに遭遇したので記事にしました。
結論
今回の場合はhas_many
のせいではなくroom.rb(Roomモデル)
の一行目の記述が何故か消えてしまった事によるものでした。
room.rb
class Room < #この部分が消えていた!
has_many :users, through: :user_rooms
has_many :chats, dependent: :destroy
has_many :user_rooms, dependent: :destroy
end
正しくは
room.rb
class Room < ApplicationRecord
has_many :users, through: :user_rooms
has_many :chats, dependent: :destroy
has_many :user_rooms, dependent: :destroy
end
他にも
少し調べただけですがタイポしてたりするとこのエラーが発生するようです。
put 'Hello World!'
#=> undefined method `put' for main:Object (NoMethodError)
→正しくはputs
この場合はタイポしているメソッドに対してエラーが出るのでわかりやすい。
他にも中身が入っていないもの(nil)に対してメソッドを書いているとか。
この場合もメソッドに対してエラーが出るみたいなのでちょっとわかりにくいですね。
参考にさせていただきました
最後に
今回はすぐに気が付けましたがhas_many
の方がを深堀りしていたらきっとまだ解決していなかったかもな、と思うとエラー文の周りを見ることの大事さを実感しました。
最後まで閲覧頂きありがとうございました!