ruby on railsでアプリケーション作成中に出遭ったエラーについての解決方法です。
今回、ターミナルからrails g migration Addカラム名Toテーブル名でカラムを追加したところ、テーブル名を間違えてしまったようでエラーになりました。
エラーメッセージ
Migrations are pending. To resolve this issue, run:
bin/rails db:migrate RAILS_ENV=development
You have 1 pending migration:
20241025004905_add_user_id_to_tweers.rb
マイグレーションは保留中、bin/rails db:migrate RAILS_ENV=developmentを実行してとのことなのでターミナルに入力。
続いて下記エラーが発生。
StandardError: An error has occurred, all later migrations canceled: (StandardError)
~中略〜
Caused by:
ActiveRecord::StatementInvalid: Mysql2::Error: Table 'pictweet2_development.tweers' doesn't exist (ActiveRecord::StatementInvalid)
/Users/--USERNAME--/projects/pictweet2/db/migrate/20241025004905_add_user_id_to_tweers.rb:3:in `change'
ここでテーブル名がtweetsではなく、tweersになっていると気づく。
解決方法
% rails db:migrate:status
上記ターミナルで実行し、マイグレーションファイルの状況を確認
Status Migration ID Migration Name
--------------------------------------------------
up 20241024001642 Create tweets
up 20241024073306 Devise create users
up 20241024075347 Add nickname to users
down 20241025004905 Add user id to tweers
問題のファイルが一番したのファイルですが、statusがdownになっていることを確認。
migrationファイルの修正は必ずstatusをdownにしてから行う必要がある
該当のマイグレーションファイルのクラス名とファイル名を手入力で変更。
% rails db:migrate
上記を実行したところ正しいテーブル名となり、エラーが解消した。
まとめ
エラーになる原因はスペルミスが多いので重要な変更をする際には注意が必要。
エラー時にはメッセージを読むのが解決の糸口になる。
どちらも当たり前だけど大事な基本だあと認識した。