NoMethodErrorを解決する。

f:id:khirok:20191231215721p:plain

Progateで学習していたユーザー機能を、自分のアプリに追加していたため、もともと存在していたuser_idをuser_progate_idに変えました。

 

そして、新規投稿しようとすると、このようなエラーが発生しました。

 

application_controller.rbのsession[:user_id]をsession[:user_progate_id]に変えましたが、変化なし。

 

他のファイルにおいても、user_idと書いてある部分をuser_progate_idに直しましたが、変化なし。

 

原因が全然わからず、undefined method 'user_id'とググって、

https://musicamusik.hatenablog.com/entry/2018/05/26/172643

この記事を読みました。

 

記事の中でモデルの話をしていたので、「そういえばモデルは確認していなかった!」と思い (app / models / post.rb) を確認。

 

すると、

validates :user_id, {presence: true}

と書いていたことに気づけました。

validates :user_progate_id, {presence: true}

このように修正して、画面をリロードすると

f:id:khirok:20191231221042p:plain

投稿できました!

 

エラーが起こってるよ!とRailsさんに言われた箇所はコントローラーでしたが、実際の原因は、モデルでした。

f:id:khirok:20191231221757p:plain

これは、いろんな処理を行ってくれているRailsさんの気持ちになれば分かります。

Railsさんは、@post.saveで、@postに入っているデータをモデルを通してデーターベースに書き込んでいます。

 

その際に、

undefined method `user_id' 

「(モデルに)定義されてないuser_idがある」とおっしゃっています。

 

「モデルに」の部分はこちらが察しなければいけませんでした。

 

以上。