【Rails】アソシエーションを設定している際のモデル作成について

スクールの最終課題の機能実装において、ほぼ解決に1日かかったエラーについての記録です。
原因を探り、一つ一つ記述を変えては戻りの繰り返し…
長くなりますが、手順を追って書いていきたいと思います。


・前提・
仮ビューファイルを表示するため、先にitemモデル・コントローラーを一番始めに生成。
その後userモデル・コントローラーを生成。 f:id:programmingnuoh:20210307152625p:plain


・問題点・
商品登録機能について、開発環境ではデータを保存できるが、Heroku上での本番環境では保存ができない(エラー画面が発生)
f:id:programmingnuoh:20210307151454p:plain


・目標着地点・
本番環境でも開発環境と同様の、データ保存ができるようにする。


・原因箇所・
今回のエラーで、下記2箇所につまづきました。 ①モデルの作成の順序が違う。
 アソシエーションがある場合、親から作成する。
 (今回はUser→Item→Active Storage)
※本来は開発環境で実装している時点でエラーが起きているはずだが、今回はエラーが起きず。
f:id:programmingnuoh:20210307152749p:plain 該当のエラー文↓

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関連の記述している箇所を削除する。

④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のアンインストール・バージョン変更