ruby-on-rails - 从关联模型(表)中查找至少具有一个关联的所有记录
问题描述
所以假设我有这个:
class Tree < ActiveRecord::Base
has_many :fruits
has_many :flowers
end
class Fruit < ActiveRecord::Base
belongs_to :tree
end
class Flower < ActiveRecord::Base
belongs_to :tree
end
如何进行有效的查询,以获取Tree
至少具有一个Flower
或Fruit
实例或两者兼有的所有实例?这个想法是没有得到Tree
那些根本没有Flower
的Fruit
。
解决方案
我会使用这样的查询:
Tree.left_joins(:fruits, :flowers).where('fruits.id IS NOT NULL OR flowers.id IS NOT NULL').distinct
它将产生这个 SQL:
SELECT DISTINCT "trees".* FROM "trees" LEFT OUTER JOIN "fruits" ON "fruits"."tree_id" = "trees"."id" LEFT OUTER JOIN "flowers" ON "flowers"."tree_id" = "trees"."id" WHERE (fruits.id IS NOT NULL OR flowers.id IS NOT NULL)
推荐阅读
- java - java CDI注入如何注释和修改第三方类
- amazon-web-services - 如何将域定向到 aws s3 存储桶上的子文件夹?
- android - 如何使用 Dagger-Hilt 注入 Kotlin 扩展属性
- python - 使用时间增量迭代时跳过周日期
- javascript - MongoDB前端和后端日期匹配显示完全匹配,仍然进入if语句
- java - 我如何设置条件以仅显示那些具有“名称”的短信?借助 Android Studio 中的光标
- css - ReactTransitionGroup 动画未在状态更改时播放
- php - docker 从图像中编写 php 应用程序
- odoo - odoo.exceptions.ValidationError:验证视图时出错:
- xml - XSLT 在 XML 问题中插入 2 个不同的元素