我有3种型号,User
,House
和Car
。我如何找到拥有单个查询的房屋或汽车的所有用户?这是我的模型的设置方式,下面是我目前正在为实现相同结果而做的。
class User
has_many :houses
has_many :cars
end
class House
belongs_to :user
end
class Car
belongs_to :user
end
尝试:
User.where(id: House.all.pluck(:user_id) + Car.all.pluck(:user_id)).distinct
不幸的是,这必须进行3个查询,一个要获取所有HOUSE USER_ID,另一个用于Car user_ids,然后是最终的查询来获取用户。是否有一种创造性的方式可以使用加入来查找所有具有房屋或汽车的用户?
User.left_outer_joins(:houses, :cars)
.select("users.id, count(houses.id), count(cars.id)")
.group("users.id")
.having("count(houses.id) > 0 OR count(cars.id) > 0")