ruby-on-rails – 迁移DATA – 不仅仅是模式,Rails
发布时间:2020-12-16 20:01:15 所属栏目:百科 来源:网络整理
导读:有时需要数据迁移.随着时间的推移,使用域模型的代码更改和迁移不再有效,迁移失败.迁移数据的最佳做法是什么? 我试着举个例子来澄清问题: 考虑这个.你有迁移 class ChangeFromPartnerAppliedToAppliedAt ActiveRecord::Migration def up User.all.each do |
有时需要数据迁移.随着时间的推移,使用域模型的代码更改和迁移不再有效,迁移失败.迁移数据的最佳做法是什么?
我试着举个例子来澄清问题: 考虑这个.你有迁移 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.你应该怎么做? 解决方法
最佳做法是:不要在迁移中使用模型.迁移改变了AR映射的方式,所以不要使用它们.用SQL完成所有操作.这样它总是会奏效的.
这个: User.all.each do |user| user.applied_at = user.partner_application_at user.save end 我会这样做 update "UPDATE users SET applied_at=partner_application_at" (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |