说我有这个迁移:
class MigrateStuff < ActiveRecord::Migration
def up
add_column :contacts, :receive_newsletter, :boolean, :default => false
add_index :contacts, :receive_newsletter
for t in SomeOtherThing.all
#... do stuff in here
end
end
def down
#...
end
end
所以我添加了一个列和索引。然后我将一些数据放入新列中。如果我的for
循环中的某些部分失败会发生什么?列/索引不会被删除。我尝试将此添加到事务中:
class MoveEmailRecipientsToContacts < ActiveRecord::Migration
def up
Volunteer.transaction do
add_column :contacts, :receive_newsletter, :boolean, :default => false
add_index :contacts, :receive_newsletter
for t in SomeOtherThing.all
#... do stuff in here
end
end
end
def down
#...
end
end
那么for
块中出现异常,这不会导致事务回滚吗?但是列和索引仍然存在!
处理这个问题的正确方法是什么?