ActiveModel::UnKnownAttributeErrorに遭遇
Rubyを用いたフリマアプリの作成中にActiveModel::UnKnownAttributeErrorが出ました。
「formから入力された値をテーブルに保存しようとしたけど、この名前のカラムは存在しないから保存できません」 というものです。
上記の画像で説明すると、@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
を実行する。
スペルミスはよくあることなので、念入りにチェックしていきたいと感じました。