有时候需要进行数据迁移。随着时间的推移,代码会发生变化,使用您的领域模型进行迁移将不再有效,从而导致迁移失败。迁移数据的最佳实践是什么?
我尝试举个例子来澄清问题:
考虑这个问题。您有一个迁移。
我尝试举个例子来澄清问题:
考虑这个问题。您有一个迁移。
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>
这不是团队合作的表现,他会修复你引入的 bug。你应该怎么做?
User.update_all('applied_at = partner_application_at')
而不是User.all.each
等。 - Mischa