Migrationファイルに変更、修正が必要になった際に気をつけなければならないことについて、
備忘録に残しておきます。
結論:rails db:rollbackコマンドを実行することでupをdownに変更してから、Migrationファイルを変更、修正する。
流れとしては、
まず以下コマンドで現在のMigrationファイルの状態を調べる。
$ rails db:migrate:status
するとこのように表示される。
database: my_portfolio3_development
Status Migration ID Migration Name
--------------------------------------------------
up 20210404083931 Devise create users
up 20210404090003 Create articles
up 20210404093852 Create comments
もしカラムを間違えて作成してしまったり、カラムの追加が必要なときに、
upになっているMigrationファイルを単に編集してrails db:migrateをしただけでは、
正しく読み込まれない。
さらに、Migrationファイルの中身とデータベースの中身に差異が生じる危険もあるため、
やってはならない。
ではどういう流れでMigrationファイル変更すればいいのかと言いますと・・・、
「まず$ rails db:rollbackを実行してから」というのが答えになります!
$ rails db:rollback
== 20210404093852 CreateComments: reverting ===================================
-- drop_table(:comments)
-> 0.0481s
== 20210404093852 CreateComments: reverted (0.0550s) ==========================
実行後、現在のMigrationファイルの状態を以下コマンドで調べてみると・・・
$ rails db:migrate:status
database: my_portfolio3_development
Status Migration ID Migration Name
--------------------------------------------------
up 20210404083931 Devise create users
up 20210404090003 Create articles
down 20210404093852 Create comments
1個、downになっていますね!
このようにして、1個ずつrollbackしていきます。
私の場合、編集したかったのは「Create articles」だったのであと一回rollback。
$ rails db:rollback
== 20210404090003 CreateArticles: reverting ===================================
-- drop_table(:articles)
-> 0.0373s
== 20210404090003 CreateArticles: reverted (0.0417s) ==========================
実行後、現在のMigrationファイルの状態を以下コマンドで調べてみると・・・
$ rails db:migrate:status
database: my_portfolio3_development
Status Migration ID Migration Name
--------------------------------------------------
up 20210404083931 Devise create users
down 20210404090003 Create articles
down 20210404093852 Create comments
「Create articles」もdownになりました!
あとは、単純にMigrationファイルを編集して、そのあとrails db:migrateを実行する。
(補足)ちなみに削除する際は下記コマンドを実行。
$ rm db/migrate/20210704125813_create_tweets_rb
実行までしたあと、念の為以下コマンドで確認してみると、
$ rails db:migrate:status
database: my_portfolio3_development
Status Migration ID Migration Name
--------------------------------------------------
up 20210404083931 Devise create users
up 20210404090003 Create articles
up 20210404093852 Create comments
ちゃんとまたupの状態に戻っていますね!
これで編集完了です!
rails sでサーバーを立ち上げてみると、ちゃんとエラーが解消されていました^^