Rails学習中です。初歩的なところですがメモを残しておきます。
- Rails4
- Ruby2.1.0
色々突っ込みどころもあると思いますが、問題の元はこれでした。
class ChangeTypeNotes < ActiveRecord::Migration def change change_column :notes, :is_public, :boolean end end
notesのis_publicを間違えてstring型にしていたので、これをboolean型にしたかったのです。とりあえず上記のマイグレーションは成功しました。その後、Heroku上でmigrationしようと思った所失敗しました。ちょっと調べた感じで、stringからbooleanへの変換が問題のようだったので、rake db:rollback
やったのですが、成功しない。更に調べた所原因がわかりました。
changeでmigration後に戻れるメソッド
- add_column
- add_index
- add_reference
- add_timestamps
- create_table
- create_join_table
- drop_table (must supply a block)
- drop_join_table (must supply a block)
- remove_timestamps
- rename_column
- rename_index
- remove_reference
- rename_table
日本語のブログでもこの辺り解説しているものがあったのですが、探しだせなかったので今探し出せたものから引用しました。migrationファイルのchangeメソッドで上記のchangeはreversible(戻れる)ようです。上記以外のメソッドは、(一部例外を除き)irreversible(戻れない)ようです。
僕の場合、Herokuも使いこなしていなかったのでとりあえず、何とかしたいなぁ思い、ローカルの上記migrationファイルを下記のように変更して、一旦戻ってそれから必要な変更を加えました。ちょっと変なやり方だったかもしれないけれどとりあえずのメモとして。
class ChangeTypeNotes < ActiveRecord::Migration def up remove_column :notes, :is_public, :string end def down add_column :notes, :is_public, :string end end