class 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–2018 David Heinemeier Hansson
Licensed under the MIT License.