首页 > 解决方案 > 查找带有“幽灵”孩子的记录

问题描述

我有 Box 和 Toy 实体。

class Box < ApplicationRecord
  has_one :toy
end

class Toy < ApplicationRecord
  belongs_to :box
end

有些东西破坏了我的数据,一些玩具被删除了。如何选择不再存在的所有与玩具有链接的盒子?

我可以编写复杂的 SQL,但想感受 Rails 的魔力,可以执行以下操作:

Box.where(toy: does_not_exist_any_more)

退回的盒子在 toy_id 字段中不应有 nil 而是数字,并且在玩具中 id = number的地方没有记录

标签: ruby-on-railsactiverecord

解决方案


尝试:

Box.where.not(id: Toy.all.pluck(:box_id))

这个:

Toy.all.pluck(:box_id)

将为您提供Box任何Toy.

然后这个:

Box.where.not(id: Toy.all.pluck(:box_id))

将为您提供当前未由某些实例引用的所有框Toy


推荐阅读