如何查询与此相关的所有对象



我有3种型号,UserHouseCar。我如何找到拥有单个查询的房屋或汽车的所有用户?这是我的模型的设置方式,下面是我目前正在为实现相同结果而做的。

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")

相关内容

最新更新