undefined method エラー解消
NoMethodError in MessagesController#create
undefined method `message' for #<Room:0x00007fa9065717a8>
def create
@room = Room.find(params[:room_id])
@message = @room.message.new(message_params)
@message.save
end
{"authenticity_token"=>"kK5hHuNqFM72OK/UKel8gZY460pFfn1ZBkAKXsQhjJti/OWmvTaS3nojQeS0MbaFrDogz0BfoToEk7cDKh9vTQ==", "message"=>{"content"=>"さdkbkjsd"}, "commit"=>"送信", "room_id"=>"1"}
エラー。
今回が今までで一番時間かかったなぁ。
考えた手順は以下の通り。
①ビューはコントローラーへパラムス送信してる
→"message"=>{"content"=>"さdkbkjsd"}, "commit"=>"送信", "room_id"=>"1"}
②コントローラー記述に間違いはないか
→何度も何度も見直し、messagesはテーブル名ということで "message"→"messages" に変更。他は間違いなし。
③これが定義されてない…messages が孤立してる?
関係性…
アソシエーション!?
models/room.rb
class Room < ApplicationRecord
has_many :room_users
has_many :users, through: :room_users
has_many :rooms
validates :name, presence: true
end
というわけでroomモデルファイルに原因が見つかった。
"has_many :rooms" → "has_many :messages"
たいしたエラーではないのだろうけれど、自分で解決すると他のことも一緒に調べるから勉強になる。
ちなみに "belongs_to" の場合は後ろの文字が単数形になる。
でも時間かかっちゃうからエラーが出たときだけ、精神と時の部屋に篭りたい。