未来模型不可知的db迁移轨道

时间:2013-05-30 09:23:58

标签: ruby-on-rails rails-migrations

一般问题是,如果将来通过添加没有数据库支持的代码来更改模型,迁移可能会失败。

场景与此类似: 我有这样的迁移:

def change
  Product.find_each do |product|
    product.prices.each do |price|
      price.supplier_part_number = product.supplier_part_number
      price.save
    end
  end
end

迁移部署到暂存。 然后将状态机添加到Price模型,该模型需要state属性。 add_state迁移已部署到分段,因此Price在dev和on staging上具有state属性。

决定将应用程序部署到Production。

以上显示的迁移将不会执行,因为state属性不存在。这是后来添加的......

因此,迁移似乎受到模型未来状态的影响......

是否有任何宝石或做法可以避免这些瓶颈?

1 个答案:

答案 0 :(得分:0)

我找到了一个在rails社区中被广泛接受的解决方案: http://guides.rubyonrails.org/migrations.html#using-models-in-your-migrations

所以迁移应该改为:

class MigrateFieldsFromProductToPrice < ActiveRecord::Migration
  class Price < ActiveRecord::Base
  end

  def change
    Price.reset_column_information
    Product.find_each do |product|
      product.prices.each do |price|
        price.supplier_part_number = product.supplier_part_number
        price.save
      end
    end
  end
end