ruby-on-rails – 迁移DATA – 不仅仅是模式,Rails

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 迁移DATA – 不仅仅是模式,Rails前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有时需要数据迁移.随着时间的推移,使用域模型的代码更改和迁移不再有效,迁移失败.迁移数据的最佳做法是什么?

我试着举个例子来澄清问题:

考虑这个.你有迁移

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"

猜你在找的Ruby相关文章