0
0

railsのマイグレーションファイルを削除する方法

Last updated at Posted at 2024-06-14

環境

$ ruby -v
ruby 3.2.1 (2023-02-08 revision 31819e82c8) [aarch64-linux]
$ rails -v
Rails 7.0.6

削除手順

現在のマイグレーションの状況を確認する。

$ rails db:migrate:status

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20230206140511  Create tasks

削除対象のIDを指定し、statusをdownに。

$ rails db:migrate:down VERSION=20230206140511

一応確認。

$ rails db:migrate:status

 Status   Migration ID    Migration Name
--------------------------------------------------
  down    20230206140511  Create tasks

downさせたマイグレーションファイルは削除。(guiでも可)

$ rm db/migrate/20230206140511_create_tasks.rb

マイグレーションが削除されているのを確認。

$ rails db:migrate:status

 Status   Migration ID    Migration Name
--------------------------------------------------

先にファイルを削除してしまっていた場合

$ rails db:migrate:status

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20230206140511  ********** NO FILE **********

ファイルはないけど、マイグレーションからは削除されていないといった状況。
NO FILEのマイグレーションに対して{Migration_ID}_{Migration_Name}の形で適当なファイルを割り当てる。(Migration Nameは一意に)

$ touch db/migrate/20230206140511_hoge.rb

反映されていることを確認。

$ rails db:migrate:status

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20230206140511  Hoge

割り当てたファイルにclassだけ記載。

20230206140511_hoge.rb
class Hoge < ActiveRecord::Migration[7.0]
end

あとは削除手順

不可逆なマイグレーションの削除でエラーになった時

changeメソッドでのdrop_tableremove_columnなどの不可逆なマーグレーションをdownさせる際はエラーになってしまう。
パワープレイではあるが、マイグレーションファイルを書き換えてしまえばエラーは回避可能。
ただし

対応前
class DropTableTasks < ActiveRecord::Migration[7.0]
  def change
    drop_table :tasks
  end
end
対応後
class DropTableTasks < ActiveRecord::Migration[7.0]
end
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