【Rails】アソシエーションを設定している際のモデル作成について
スクールの最終課題の機能実装において、ほぼ解決に1日かかったエラーについての記録です。 原因を探り、一つ一つ記述を変えては戻りの繰り返し… 長くなりますが、手順を追って書いていきたいと思います。
・前提・ 仮ビューファイルを表示するため、先にitemモデル・コントローラーを一番始めに生成。 その後userモデル・コントローラーを生成。
・問題点・ 商品登録機能について、開発環境ではデータを保存できるが、Heroku上での本番環境では保存ができない(エラー画面が発生)
・目標着地点・ 本番環境でも開発環境と同様の、データ保存ができるようにする。
・原因箇所・ 今回のエラーで、下記2箇所につまづきました。 ①モデルの作成の順序が違う。 アソシエーションがある場合、親から作成する。 (今回はUser→Item→Active Storage) ※本来は開発環境で実装している時点でエラーが起きているはずだが、今回はエラーが起きず。 該当のエラー文↓
Completed 500 Internal Server Error in 14ms ActiveModel::UnknownAttributeError (unknown attribute ‘name’ for Item.):
②Heroku上でのマイグレート・ロールバックの方法について。
・解決方法・ ①開発環境上で該当のマイグレーションファイルをロールバック 今回はUserモデルを先頭にしたいので、Item・Active Storageモデルをそれぞれロールバックする。
②Itemモデルを削除
rails d model item
を実行。
③Active Storageをアンインストールする アンインストール後も残っているActive Storage関連の記述している箇所を削除する。
- app/javascript/packs/application.js
- package.json
- yarn.lock
④Itemモデルを再作成、マイグレーションファイルをマイグレート
⑤Active Storageを再インストール、③で削除した記述を復活させる
⑥git pushを行う。その後本番環境へマイグレートする。
本番環境へマイグレートする際はheroku run DISABLE_DATABASE_ENVIRONMENT_CHECK=1 rails db:drop db:create db:migrate
を実行。
heroku run rails db:migrate
はマイグレートのみしかできないため、マイグレーションの訂正等を行う時は上記のコマンドを実行する。
⑦heroku masterへプッシュ
以上で目標着地点到達です。
今回、以下の記事を参考にいたしました。ありがとうございました。 【Rails】Heroku上でのActiveModel::UnknownAttributeError解決方法 - Qiita webアプリ(railsで作成)のherokuでのデプロイでエラー|teratail HTTP レスポンスステータスコード - HTTP | MDN rails c で「call 'Hoge.connection' to establish a connection」が出た時の対応 Ruby on Rails 『NO FILEのmigrationを削除する方法』 【Rails】gemのアンインストール・バージョン変更