環境
$ 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_table
やremove_column
などの不可逆なマーグレーションをdownさせる際はエラーになってしまう。
パワープレイではあるが、マイグレーションファイルを書き換えてしまえばエラーは回避可能。
ただし
対応前
class DropTableTasks < ActiveRecord::Migration[7.0]
def change
drop_table :tasks
end
end
対応後
class DropTableTasks < ActiveRecord::Migration[7.0]
end