ruby-on-rails - 查找带有“幽灵”孩子的记录
问题描述
我有 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的地方没有记录
解决方案
尝试:
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
。
推荐阅读
- arrays - 如何合并MongoDB中的对象
- python - 如何在python中将服务器url连接到sqlite3
- database - GKE 上的 Odoo 无法连接外部 postgres 数据库
- optimization - 确定 MarkLogic 内容数据库的优化林数
- java - Spring Boot 应用程序:我什么时候必须关闭上下文?
- tsql - 反透视数据 t-sql
- css - ngx-admin:使用 NbDialog 时后台页面跳转
- python - 使用并发期货时以原始顺序返回列表
- apache-flink - 在 flink 内部 contextService 是如何工作的?
- ios - 使用 fastlane 将新版本上传到同一版本?