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[7.1]
def change
create_table :distributors do |t|
t.string :zipcode
end
execute " ALTER TABLE distributors\n ADD CONSTRAINT zipchk\n CHECK (char_length(zipcode) = 5) NO INHERIT;\n SQL\n end\nend\n"
There are two ways to mitigate this problem.
-
Define
#up
and#down
methods instead of#change
:
class ReversibleMigrationExample < ActiveRecord::Migration[7.1]
def up
create_table :distributors do |t|
t.string :zipcode
end
execute " ALTER TABLE distributors\n ADD CONSTRAINT zipchk\n CHECK (char_length(zipcode) = 5) NO INHERIT;\n SQL\n end\n\n def down\n execute <<~SQL\n ALTER TABLE distributors\n DROP CONSTRAINT zipchk\n SQL\n\n drop_table :distributors\n end\nend\n"
-
Use the #reversible method in
#change
method:
class ReversibleMigrationExample < ActiveRecord::Migration[7.1]
def change
create_table :distributors do |t|
t.string :zipcode
end
reversible do |dir|
dir.up do
execute " ALTER TABLE distributors\n ADD CONSTRAINT zipchk\n CHECK (char_length(zipcode) = 5) NO INHERIT;\n SQL\n end\n\n dir.down do\n execute <<~SQL\n ALTER TABLE distributors\n DROP CONSTRAINT zipchk\n SQL\n end\n end\n end\nend\n"
Method Summary
Methods inherited from MigrationError
Constructor Details
This class inherits a constructor from ActiveRecord::MigrationError