一般问题是,如果将来通过添加没有数据库支持的代码来更改模型,迁移可能会失败。
场景与此类似: 我有这样的迁移:
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属性不存在。这是后来添加的......
因此,迁移似乎受到模型未来状态的影响......
是否有任何宝石或做法可以避免这些瓶颈?
答案 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