The migration that cannot be undone: Irreversible Migration

Migrations have up and down methods, as we all know. But in some cases, your up method does things you can’t undo in your down method.

For example:

def self.up
  # Change the zipcode from the current :integer to a :string type.
  change_column :address, :zipcode, :string
end

Now, converting integers to strings will always work. But, you feel it coming, converting a string into an integer will not always be possible. In other words, we can’t reverse this migration.

That’s why we should raise ActiveRecord::IrreversibleMigration in the down method.

def self.down
  raise ActiveRecord::IrreversibleMigration
end

Now, if you run your migration (upwards), you’ll see it being applied like it shoud. However, if you try to go back, you’ll see rake aborting with ActiveRecord::IrreversibleMigration.

$ rake db:migrate VERSION=4
-- Database is migrated
$ rake db:migrate VERSION=3
-- Rake aborted!
-- ActiveRecord::IrreversibleMigration

So, if you have things you can’t undo, raise ActiveRecord::IrreversibleMigration in your migration’s down method.

Please share the love...

These icons link to social bookmarking sites where readers can share and discover new web pages.
  • bodytext
  • del.icio.us
  • description
  • Reddit
  • Technorati
  • e-mail

If you enjoyed this post, please consider to leave a comment or subscribe to the feed and get future articles delivered to your feed reader.

Comments

No comments yet.

Leave a comment

(required)

(required)