Иногда требуется миграция данных. По прошествии времени изменения кода и миграции с использованием вашей модели домена перестают быть действительными, а миграции не выполняются. Каковы наилучшие методы переноса данных?
Я попытался сделать пример, чтобы прояснить проблему:
Рассмотрим это. У вас есть миграция
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>
Чтобы не быть игроком в команде, он будет исправлять введенную вами ошибку. Что вы должны были сделать?