我经常遇到这种情况 - 作为迁移的一部分,我需要添加一个列,并将其设置为某个值(假设根据现有数据计算一些值)。由于dml不可逆,我通常会这样做:
class AddRatingsAndReviews < ActiveRecord::Migration
def up
add_column :faults, :rating, :float
add_column :faults, :reviews, :integer
add_column :drills, :rating, :float
add_column :drills, :reviews, :integer
exec 'update faults set rating = round((random() * 2 + 3) :: numeric, 1), reviews = round((random() * 500) :: numeric, 0)'
end
def down
add_column :faults, :rating, :float
add_column :faults, :reviews, :integer
add_column :drills, :rating, :float
add_column :drills, :reviews, :integer
end
end
但是,我更愿意使用更改迁移。我是否只将exec放入一个空白down
部分的可逆块中?在这里做什么是轨道?
编辑 - 因为似乎在Rails 4中引入了reversible
方法,这里的Rails 3响应是什么?