如何在现有模型上从add_reference rails migration迁移id

时间:2017-05-23 17:10:07

标签: ruby-on-rails rails-migrations

我有4个现有模型,分别是RegionA,RegionB,ProductA和带定义

的ProductB
class RegionA < ...
   has_many :product_as
   ...
end

class ProductA < ...
   belongs_to :region_a
   ...
end

class RegionB < ...
   has_many :product_bs
   ...
end

class ProductB < ...
   belongs_to :region_b
   ...
end

我可以通过运行

生成的迁移来添加productB和regionA之间的关联
rails g migration AddProductAToRegionBs producta:references

但是新列中未填充ID。鉴于有数百万条记录,以不会强制迁移运行数小时的方式填充这些ID的最佳方法是什么?我可以从迁移中获取activejob,还是最好在部署后运行手动脚本?这里最好的方法是什么?

2 个答案:

答案 0 :(得分:0)

您如何期望Rails知道哪个产品B属于RegionA的哪个记录?如果您可以以编程方式定义此行为,则可以执行以下操作:

ProductB.all.map { |p| p.region_a = region_a }

region_a是您找到的已定义区域。这也可以放在您的迁移中。

答案 1 :(得分:0)

我最终编写了一个脚本,该脚本在sidekiq中运行了相当于迁移的脚本,以便在首先运行迁移之前填充关联。然后我在部署之前有一个准备好的数据库,转换很简单。