0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ActiveRecord::PendingMigrationError【Ruby on Rails】

Posted at

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

上記を実行したところ正しいテーブル名となり、エラーが解消した。

まとめ

エラーになる原因はスペルミスが多いので重要な変更をする際には注意が必要。
エラー時にはメッセージを読むのが解決の糸口になる。
どちらも当たり前だけど大事な基本だあと認識した。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?