rails删除其父记录不再存在的相关记录

时间:2014-03-17 06:45:37

标签: ruby-on-rails database

这可能看起来像一个愚蠢的问题,您只需说使用has_many :child_model, dependent: :destroy

是的,我们当然已经添加了。

但问题是我们已经拥有child_model parent_model_id的大量记录(约300万),但其中一些(~60k)记录parent_model_idParentModel.exists?(parent_model_id)返回false

我可以运行循环遍历child_model中的所有记录并检查上述情况,但我想知道是否有办法从sql中获取记录,

可以从ChildModel.joins(:parent_model)过滤ChildModel.all然后给我们休息的东西。

由于

1 个答案:

答案 0 :(得分:1)

如果您运行迁移,则不会循环记录(可能是调度程序?),而是运行SQL语句来删除这些记录。

execute "DELETE FROM child_model WHERE parent_model_id NOT IN (SELECT id FROM parent_model)"