класс 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
-
Используйте метод reversible в методе
#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–2018 David Heinemeier Hansson
Licensed under the MIT License.