NoMethodErrorとUnknownAttributeErrorが出た時の対処方法
技術ネタはめちゃくちゃ久しぶりの投稿になる。最近作ってるアプリでNoMethodErrorとUnknownAttributeErrorが出た時の対処法を書いてみる。
NoMethodErrorの対処方法
NoMethodError (undefined method `id' for nil:NilClass):
app/controllers/tweets_controller.rb:22:in `tweet_params'
app/controllers/tweets_controller.rb:10:in `create'
エラーメッセージでtweet_params
とcreate
が悪さしてると思い、コードを何度も読み返すも、間違っていない。(最初に一番上のエラーに着目するべきだと一日かけて理解する。) 色々調べてみてある仮説に行き着いた。「idがnilということはログインできてな!?」3000/user/sign_in
でログインしてから再度ツイートすると以下のエラーが吐き出される。
ActiveModel::UnknownAttributeError (unknown attribute 'text' for Tweet.):
エラー内容が変わった!まだ、エラーだけど前進したっぽくテンション爆上げ。どうやらログインせずにツイート投稿しようとしたため、current_user.id
が認識しなかったぽい。user_idがnilなのでtweetが保存されないというのが原因。
UnknownAttributeErrorの対処方法
結果から言うとtweetテーブルにtextカラムがないことで発生するエラー。(これも解決に2時間くらいかかった)
解決方法は指定したバージョンだけmigrateし直す。
bundle exec rails db:migrate:redo VERSION=20191114134838
参考URL: Railsで指定バージョンのmigrationだけやり直す
これで再度ツイートをしてみると、無事ツイート保存できた。 ようやっと先に進めそう。