我需要转换一些数据,但不知道该怎么做。
我有一个专业型号,有外键。我们认为这还不够,并将“有很多”改为HABTM模型,但现在在生产环境中,我需要将数据从foo_id字段转换为professional_foo联合表。
“添加表”迁移将在“删除列”之前执行,但我应该如何设置转换,因为我知道我使用的旧数据库正在使用的数据库中,我将对系统进行新的设置将直接进入最后一个代码版本,因为那样,不需要进行任何转换。 (在最新版本上初始化脚本已经修复。
答案 0 :(得分:0)
我建议在add table和drop column之间的迁移中进行数据转换。在部署新代码时应该运行此迁移,以便新代码能够与新数据结构一起使用,并且没有任何数据的新安装只会快速运行迁移,因为它不会成功要转换的数据。
迁移看起来像:
class OldProfessional < ActiveRecord::Base
self.table_name = "professionals"
has_many :foos
end
class NewProfessional < ActiveRecord::Base
self.table_name = "professionals"
has_and_belongs_to_many :foos
end
class MigrateFoosToHasAndBelongsToMany < ActiveRecord::Migration
def up
OldProfessional.all.each do |old_pro|
new_pro = NewProfessinoal.find(old_pro.id)
old_pro.foos.each do |foo|
new_pro.foos << foo
end
new_pro.save!
end
end
def down
NewProfessional.all.each do |new_pro|
old_pro = OldProfessional.find(new_pro.id)
new_pro.foos.each do |foo|
old_pro.foos << foo
end
old_pro.save!
end
end
end