класс ActiveRecord::IrreversibleMigration
Exception который может быть поднят, чтобы остановить откат миграций. Например, следующая миграция необратима. Отмена этой миграции вызовет ошибку ActiveRecord::IrreversibleMigration.
class IrreversibleMigrationExample < ActiveRecord::Migration[7.2]
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[7.2]
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[7.2]
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.