【问题标题】:How to populate ids from add_reference rails migration on existing model如何从现有模型上的 add_reference rails 迁移中填充 id
【发布时间】:2017-05-23 17:10:06
【问题描述】:

我有 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 的最佳方法是什么?我可以从迁移中启动一个活动作业,还是最好在部署后运行手动脚本?这里最好的方法是什么?

【问题讨论】:

    标签: ruby-on-rails rails-migrations


    【解决方案1】:

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

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

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

    【讨论】:

    • 这对数百万条记录来说会很快吗?我说的是 50、6000 万以上的 postgres。
    • 实际上更像是 2 亿。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2010-10-06
      • 2011-05-09
      • 1970-01-01
      • 1970-01-01
      • 2017-05-19
      • 1970-01-01
      • 2021-02-09
      • 2015-12-25
      • 1970-01-01
      相关资源
      最近更新 更多