Wohl jeder Rails-Entwickler wird sich schon einmal darüber geärgert haben, bei Trivial-Migrationen neben dem up auch noch manuell ein down implementieren zu müssen - insbesondere dann, wenn das down nicht mehr macht als ein einfaches remove_column oder rename_table.

Rails 3.1 befreit uns von dieser Last.

Bei Migrationen, die automatisch umkehrbar sind, muss man nicht mehr manuell das down ausimplementieren. Rails kümmert sich um das Rollback, wenn man in der Migration einfach ein change schreibt:

class CreateDogs < ActiveRecord::Migration
  def change
    create_table :dogs do |t|
      t.string :name
      t.string :colour
      t.timestamps
    end
  end
end

Im obigen Beispiel löscht Rails beim db:rollback automatisch die zuvor angelegte Tabelle dogs.

Lässt sich das down nicht automatisch berechnen, wird beim db:rollback eine IrreversibleMigration geworfen. Die Verwendung von change befreit uns also nicht von der Pflicht, auch das Rollback unserer Migrationen zu testen.