Exception: ActiveRecord::IrreversibleMigration
- Inherits:
 - 
      MigrationError
      
        
- Object
 - StandardError
 - ActiveRecordError
 - MigrationError
 - ActiveRecord::IrreversibleMigration
 
 
- Defined in:
 - lib/active_record/migration.rb
 
Overview
Exception that can be raised to stop migrations from being rolled back. For example the following migration is not reversible. Rolling back this migration will raise an ActiveRecord::IrreversibleMigration error.
class IrreversibleMigrationExample < ActiveRecord::Migration[5.0]
  def change
    create_table :distributors do |t|
      t.string :zipcode
    end
    execute <<~SQL
      ALTER TABLE distributors
        ADD CONSTRAINT zipchk
          CHECK (char_length(zipcode) = 5) NO INHERIT;
    SQL
  end
end
There are two ways to mitigate this problem.
- 
Define
#upand#downmethods instead of#change: 
class ReversibleMigrationExample < ActiveRecord::Migration[5.0]
  def up
    create_table :distributors do |t|
      t.string :zipcode
    end
    execute <<~SQL
      ALTER TABLE distributors
        ADD CONSTRAINT zipchk
          CHECK (char_length(zipcode) = 5) NO INHERIT;
    SQL
  end
  def down
    execute <<~SQL
      ALTER TABLE distributors
        DROP CONSTRAINT zipchk
    SQL
    drop_table :distributors
  end
end
- 
Use the #reversible method in
#changemethod: 
class ReversibleMigrationExample < ActiveRecord::Migration[5.0]
  def change
    create_table :distributors do |t|
      t.string :zipcode
    end
    reversible do |dir|
      dir.up do
        execute <<~SQL
          ALTER TABLE distributors
            ADD CONSTRAINT zipchk
              CHECK (char_length(zipcode) = 5) NO INHERIT;
        SQL
      end
      dir.down do
        execute <<~SQL
          ALTER TABLE distributors
            DROP CONSTRAINT zipchk
        SQL
      end
    end
  end
end
  Method Summary
Methods inherited from MigrationError
Constructor Details
This class inherits a constructor from ActiveRecord::MigrationError