ActiveModel::UnKnownAttributeErrorに遭遇

Rubyを用いたフリマアプリの作成中にActiveModel::UnKnownAttributeErrorが出ました。

「formから入力された値をテーブルに保存しようとしたけど、この名前のカラムは存在しないから保存できません」 というものです。

ActiveModel::UnKnownAttributeError

上記の画像で説明すると、@item = Item.new(item_params)を実行しようとしたら、 condition_idと言うデータを入れる箱(カラム)が存在しませんよ、どこか間違えてませんか?
と表示されています。

エラーが発生した原因

マイグレーションファイルを確認すると、 本来condition_idとなっていなければならないところが

  t.intger :codition_id, null: false

と記述していたため、カラムが存在しない現象が起きていました。

解決した方法

rails db:migrate:statusを実行し、修正したいマイグレーションファイルが下から何番目なのか確認

マイグレートステータス

② マイグレート実行中(up状態)にマイグレーションファイルを実行していると新たなエラーの原因となるので、rails db:rollbackコマンドを下から数えた分だけ実行
(今回はitemsをdown状態にしたいので2回)
カラム名を修正した後に、再度rails db:migrateを実行

この手順で無事にデータを保存することができました。
マイグレーションをupからdownにする方法は他にもありますが、今回はrollbackを複数回行う手段で対応しました。

まとめ

・ActiveModel::UnknownAttributeErrorはカラムが存在しないことによって起こるエラーであり、マイグレーションファイルに書かれているカラム名と相違がある場合に起こるエラーである。
・エラーの解決方法としては、実行中のマイグレーションファイルをdownの状態にし、カラム名を修正後に再度rails db:migrateを実行する。

スペルミスはよくあることなので、念入りにチェックしていきたいと感じました。