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任务