class ActiveRecord::IrreversibleMigration
Exception, которое можно вызвать, чтобы запретить откат миграций. Например, следующая миграция не может быть отменена. При откате этой миграции возникнет ошибка ActiveRecord::IrreversibleMigration.
class IrreversibleMigrationExample < ActiveRecord::Migration[8.1]
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
Есть два способа решить эту проблему.
-
Определить методы up и down вместо change:
class ReversibleMigrationExample < ActiveRecord::Migration[8.1]
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
-
Использовать метод reversible в методе change:
class ReversibleMigrationExample < ActiveRecord::Migration[8.1]
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
© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.