класс ActiveRecord::IrreversibleMigration
Исключение, которое может быть вызвано, чтобы остановить откат миграций. Например, следующая миграция необратима. Откат этой миграции вызовет ошибку ActiveRecord::IrreversibleMigration.
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
Существует два способа решения этой проблемы.
-
Определите
#upи#downметоды вместо#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
-
Используйте обратимый метод в методе
#change:
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
© 2004–2019 David Heinemeier Hansson
Licensed under the MIT License.