Railsでモデルのマイグレーションをした後に戻ろうとしたらエラー出た

Railsでモデルのマイグレーションをした後に戻ろうとしたらエラー出た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

Pocket
LINEで送る

You may also like...