Ruby on rails 未来模型无关的数据库迁移rails

Ruby on rails 未来模型无关的数据库迁移rails,ruby-on-rails,rails-migrations,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 迁移被部署到暂存。 然后将

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

该场景与此类似: 我有这样一个迁移:

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
迁移被部署到暂存。 然后将状态机添加到需要state属性的Price模型中。 add_状态迁移部署到staging,因此Price在dev和staging上具有state属性

决定将应用程序部署到生产环境中

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

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


有没有什么诀窍或做法可以避免这些瓶颈?

我找到了一个在rails社区中被广泛接受的解决方案:

因此,迁移应更改为:

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
class MigrateFieldsFromProductToPrice
这样迁移数据是不好的做法。迁移应该只包含对数据结构的更改。那么,我应该像这样将迁移放在哪里呢?您应该编写一个rake任务