複数のマイグレーションファイルが存在していて、特定のファイルのみを指定して、ロールバック→削除する方法。
不要なマイグレーションファイルを作成してしまった際に、どうやって削除するだったっけ?と毎度忘れてしまうので、備忘録として書いておきます。
環境
Rails 6.0.6.1
ruby 2.6.5
mysql Ver 14.14 Distrib 5.7.40, for osx10.18 (x86_64) using EditLine wrapper
①マイグレーションファイルの状態を確認
先ずはマイグレーションの状態を確認するために下記コマンドを実行。
% rails db:migrate:status
今回削除したいマイグレーションファイルは20230212080029 Create user prefectures
で、statusはupの状態。
Status Migration ID Migration Name
--------------------------------------------------
up 20230204081040 Devise create users
up 20230205061907 Create destinations
up 20230212080029 Create user prefectures
up 20230214022600 Create histories
up 20230214045454 Create user histories
②削除したいマイグレーションファイルを指定してロールバック
マイグレーションファイルを削除するためには、statusをdownにする必要がある為、下記コマンドを実行。
% rails db:migrate:down VERSION=20230212080029
コマンド実行後、無事に削除したいファイルのみをdownすることに成功。
Status Migration ID Migration Name
--------------------------------------------------
up 20230204081040 Devise create users
up 20230205061907 Create destinations
down 20230212080029 Create user prefectures
up 20230214022600 Create histories
up 20230214045454 Create user histories
③downしたマイグレーションファイルを削除
downしたマイグレーションファイル名を下記コマンドで指定し、実行することでファイルを削除。
% rm db/migrate/20230212080029_create_user_prefectures.rb
マイグレーションファイルを削除した後に、念の為rails db:migrate status
コマンドを実行。
問題なくデータを削除できていることを確認し、削除作業完了。
Status Migration ID Migration Name
--------------------------------------------------
up 20230204081040 Devise create users
up 20230205061907 Create destinations
up 20230214022600 Create histories
up 20230214045454 Create user histories