#migrationでやらかさないために
上手く動かないから一旦migrationファイルけしちゃお〜とか、
過去のmigrationファイルをいじってロールバックしたりmigrationしたりとごたごたするとか、、
するとコードの辻褄が合わなくなり、マイグレーションエラーの迷路から抜け出せなくなってしまって、戻り方わかんない、、migrationこわっってなったので今後そうならないように整理しようと思います。
ロールバックの注意
rails db:migrate
は最新まで一気にmigrateしますが、
rails db:rollback
はひとつ前まで戻します。
※ひとつ前とは一個前のmigration分戻すということ。(ファイル数ではない)
ですので、rails db:rollback
した後に、
けっこう前のファイルに変更を加えて、
rails db:migrate
ってやってしまうとのエラーになってしまうんですね。
具体的には次のような感じです。
ひとつロールバックしたのに3つ前のファイルをいじっちゃってるみたいな状態。
20190828061424 #変更を加えたファイル
20191021065344
----------------- #ココから下はmigration済
20191021065713
この状態でmigrationしてしまうとアウトです。
エラーになっても焦らず対処
仮に変更を加えてしまったファイルが
20190828061424だとしまして、
まず、今どこまでロールバックできているのかの確認!
$ rails db:abort_if_pending_migrations
これをしてみましょう。
$ rails db:abort_if_pending_migrations
# => You have 1 pending migration:
20191021065713 CreateUsersComment
状況はこうなります。
20190828061424 #変更を加えたファイル
20191021065344
----------------- #ココから下はmigration済
20191021065713
どうやらあと2つ戻る必要があるみたい。
rails db:rollback STEP=2
とやる。
一応現状でどこまでmigration済みかを確認すると
$ rails db:abort_if_pending_migrations
# => You have 3 pending migrations:
20190828061424 CreateComments
20191021065344 CreateBooksAuthors
20191021065713 CreateUsersComment
20190828061424のファイルがmigrationしていない状態まで戻れました!
つまりこうなったと。
...
----------------- #ココから下はmigration済
20190828061424 #変更を加えたファイル
20191021065344
20191021065713
この状態で、rails db:migrate
すれば無事変更できる。
もう怖くない。