有时,需要进行数据迁移。随着时间的推移,使用您的域模型的代码更改和迁移不再有效并且迁移失败。迁移数据的最佳做法是什么?
我试着举一个例子来澄清这个问题:
考虑一下。你有一个迁移
class ChangeFromPartnerAppliedToAppliedAt < ActiveRecord::Migration
def up
User.all.each do |user|
user.applied_at = user.partner_application_at
user.save
end
end
当然,这运行得很好。稍后,您需要更改架构
class AddAcceptanceConfirmedAt < ActiveRecord::Migration
def change
add_column :users, :acceptance_confirmed_at, :datetime
end
end
class User < ActiveRecord::Base
before_save :do_something_with_acceptance_confirmed_at
end
对你来说,没问题。它运行完美。但是,如果您的同事今天拉了这两个,还没有运行第一次迁移,他将在运行第一次迁移时收到此错误:
rake aborted!
An error has occurred, this and all later migrations canceled:
undefined method `acceptance_confirmed_at=' for #<User:0x007f85902346d8>
那不是团队合作者,他将修复您引入的错误。你应该怎么做?