如何在现有模型上填充 add_reference rails 迁移中的 ID



我有 4 个现有模型,例如区域 A、区域 B、产品 A 和产品 B 的定义

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

我可以通过运行由 生成的迁移来添加产品 B 和区域 A 之间的关联

rails g migration AddProductAToRegionBs producta:references

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

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

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

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

我最终编写了一个脚本,该脚本在 sidekiq 中运行等效的迁移,以便在首先运行迁移之前填充关联。然后,我在部署之前准备了一个数据库,过渡很简单。

最新更新