47
41

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の解決方法

Last updated at Posted at 2020-02-19

1.エラーメッセージの内容

下記のようなエラーの場合の解決方法を記載します
スクリーンショット 2020-02-19 7.45.15.png

2.エラーの原因

エラーの理由はmigrateし忘れてますよというものです。
考えられる理由は下記の3つです

1.単純にrails db:createのあとrails db:migrateし忘れている
2.すでにmigrationが完了している(up)状態でマイグレーションファイルを更新しrails db:migrateしてしまった
3.マイグレーションファイルの中に入れた外部参照キーが参照するテーブルがない状態でrails db:creatしてしまった(マイグレーションファイルの記述に誤りがある)

3.エラーの解決方法

1.単純にrails db:createのあとrails db:migrateし忘れている

マイグレーション実行の下記のコマンドを打ち込みましょう

$ rails db:migrate

2.すでにmigrationが完了している(up)状態でマイグレーションファイルを更新しrails db:migrateしてしまった

方法1 既存のテーブルを全削除し、再度マイグレーションの状態をupにする下記のコマンドを打ち込みましょう

$ rails db:migrate:reset

方法2 マイグレーションの最新のものだけ実行を取りやめて編集可能(down)にするコマンドrails db:rollbackののち、マイグレーションファイルの更新コマンドrails db:migrateを打ちましょう

$ rails db:rollback
$ rails db:migrate

※方法1と方法2の違いは処理速度(工程)の量の違いです。テーブルの数が多い場合は方法2としましょう。テーブルが数十程度なら方法1でも2でも大差はありません

※マイグレーションの状態を調べるコマンドは下記の通りです

$ rails db:migrate:status

3.マイグレーションファイルの中に入れた外部参照キーが参照するテーブルがない状態でrails db:creatしてしまった

①-1外部参照されるマイグレーションファイルを作成し、app/modelの中のファイルにアソシエーションを追記(または修正)する
①-2マイグレーションファイルから不必要な外部参照キーを消す

②上記①のどちらかの修正のあとに下記コマンドを打ち込みましょう

$ rails db:migrate:reset

4.すでにデータベースにレコードを入れてしまい、それを残したまま修正する方法(補足)

新たに追加したい項目のテーブルを作成し、本来追加したかったテーブルのidを外部キーとする方法をとりましょう。

参考(railsガイド): https://railsguides.jp/active_record_migrations.html#%E6%97%A2%E5%AD%98%E3%81%AE%E3%83%9E%E3%82%A4%E3%82%B0%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B

47
41
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
47
41

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?