Yuki Matsumoto

To be engneer soon / Ruby on Rails

NoMethodErrorとUnknownAttributeErrorが出た時の対処方法

2019-11-24 Yuki MatsumotoRuby on Rails

技術ネタはめちゃくちゃ久しぶりの投稿になる。最近作ってるアプリで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_paramscreateが悪さしてると思い、コードを何度も読み返すも、間違っていない。(最初に一番上のエラーに着目するべきだと一日かけて理解する。) 色々調べてみてある仮説に行き着いた。「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だけやり直す

これで再度ツイートをしてみると、無事ツイート保存できた。 ようやっと先に進めそう。