#はじめに
初心者の僕は、よくmigration周りでやらかします。
一人でやっているときは「ロールバックしちゃえ〜」「migrationファイル消しちゃえ〜」
とかやってもあまり問題ないと思いますが、
チームでやっているとそんなことは許されません・・・
なので
今回丁度勉強で作っていたサンプルで失敗したので、ロールバックの正しいやり方?を学びました。
##migration周りの注意
そもそもなぜこのあたり注意しないといけないのか?
今更気づいたので一応書いておきます。
migrationファイルを書き換えたり削除した場合、
当然次回$rake db:migrateした時にテーブル構造が変わってきます。
一人でやっている分には大して支障はないですが、
これをチームでやっている場所なんかにあげたりしてしまうと・・・
それが他の方の環境まで変わってしまい、
最悪「コードの辻褄が合わない!」なんてことになりかねません。
ということで、この辺のファイルがどれほど恐ろしいものか気づいたので
今後は普段から取り扱いに注意する癖をつけようと思いました。
##rollbackの手順
さて本題です。前述の通りこの辺は取り扱い注意なので、
失敗しない手順を学びました。
現在の状況を確認する
まずはどこまでmigrateが実行されているかを確認しましょう。
$rails db:version
このコマンドで確認できます。
$ rails db:version
Current version: 20190225214835
こんな感じで出てきます。
20190225214835まで実行されていることが分かります。
##ロールバック
次に戻したいところまでロールバックします。
$ rails db:rollback
$ rails db:rollback STEP=○
現在地を含めた○個前までなかったことにしてくれます。
(つまり○+1個前のファイルまで実行された状態)
##migrateされていないファイルを確認
念のためどのファイルが実行されていないか確認します。
$ rails db:abort_if_pending_migrations
You have 1 pending migrations:
20190225214835 UsersAddColumnProfile
20190225214835のProfileカラムが作られていないようです。
##ファイルを修正
class UsersAddColumnProfile < ActiveRecord::Migration[5.2]
def change
add_column :users, :profile, :text #profileカラムを追加
end
end
今回は例ですがUsersテーブルにprofileカラムを追加したかったので
add_column
で追加します。
##migrate
修正が完了したらマイグレートを実行します。
$ rails db:migrate
== 20190225214835 UsersAddColumnProfile: migrating ============================
-- add_column(:users, :profile, :text)
-> 0.0193s
== 20190225214835 UsersAddColumnProfile: migrated (0.0194s) ===================
これで無事修正完了です。
参考
http://song-of-life.hatenablog.com/entry/2017/11/12/234703