change_columnでmigrateしたらrollbackできなかった
change_columnでmigrateしたあとにrollbackしようとしたらrollbackできなかった…。
そのときのエラーがこれ。
[] be rake db:rollback == 20160915054652 AddTimestampsToMember: reverting ============================ rake aborted! StandardError: An error has occurred, this and all later migrations canceled: ActiveRecord::IrreversibleMigration
???だったが、
この「ActiveRecord::IrreversibleMigration」エラーというのが「不可逆なマイグレーション」、
つまり取り消せないマイグレーションですよ!ということらしい。
いろいろ調べてみたら、
「changeでは特定のメソッドでしかrollbackが利かない」、ということがわかりました。
railsguides.jp
add_column
add_index
add_reference
add_timestamps
add_foreign_key
create_table
create_join_table
drop_table (ブロックを渡す必要あり)
drop_join_table (ブロックを渡す必要あり)
remove_timestamps
rename_column
rename_index
remove_reference
rename_table
上記であれば、rollbackするとどうなるかをActiveRecordが判断してrollbackしてくれるけど、
それ以外だと自分で定義しないといかんということみたいです。
(今回change_columnを使ってるためにrollbackできなかったっぽい)
じゃあ、rollbackするときはこうして!っていうのを書くときどうするかというと、
reversibleメソッドを使う、もしくはupメソッド・downメソッドを書けばいいそう。
今回はup・downで、upメソッドにmigrateしたい処理、
downメソッドにrollbackするときの処理を書いて、無事migrate→rollbackできるようになりました。
参考にさせていただきました:
blog.jnito.com