首页 > 解决方案 > 从关联模型(表)中查找至少具有一个关联的所有记录

问题描述

所以假设我有这个:

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至少具有一个FlowerFruit实例或两者兼有的所有实例?这个想法是没有得到Tree那些根本没有FlowerFruit

标签: ruby-on-railsmodelrails-activerecord

解决方案


我会使用这样的查询:

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)

推荐阅读