Ruby on rails ActiveRecord-在查找多对多关系时避免记录实例化

Ruby on rails ActiveRecord-在查找多对多关系时避免记录实例化,ruby-on-rails,ruby,postgresql,activerecord,Ruby On Rails,Ruby,Postgresql,Activerecord,我的Rails 6/PostgreSQL应用程序中有两个模型,它们之间有多对多关系汽车和驾驶员。我们的目标是获取所有没有关联的记录(汽车)(驾驶员)。目前,这是使用Ruby(2.6.3)完成的,如下所示: result = [] Car.all.each do |car| result << car.id if car.drivers.empty? end result=[] 车。所有人。每个人都有车| 结果尝试: 首先,有司机的汽车要将所有汽车和司机关联起来,然后在的wher

我的Rails 6/PostgreSQL应用程序中有两个模型,它们之间有多对多关系<代码>汽车和
驾驶员
。我们的目标是获取所有没有关联的记录(汽车)(驾驶员)。目前,这是使用Ruby(2.6.3)完成的,如下所示:

result = []
Car.all.each do |car|
  result << car.id if car.drivers.empty?
end
result=[]
车。所有人。每个人都有车|
结果尝试:


首先,有司机的汽车要将所有汽车和司机关联起来,然后在
的where
中过滤没有司机的汽车,最后只选择一列(
id
)with.

在这种情况下,
left join
includes
更好驱动程序:{id:nil}`看起来更好。:)为什么
.pluck('cars.id')
?问题中没有任何东西可以保证它。@max问题中的代码表明OP希望作为此操作的结果拥有
car\u id
数组。顺便说一句,
.pluck(:id)
会更好,我让我自己来帮你解决这个问题。:)在这种情况下,您可以只使用
.ids
而不是
.pluck(:id)
。但通常这不是一个好主意。只需按原样使用作用域—这样,如果在where子句中使用它而不是强制执行两个查询,ActiveRecord就可以将其用作子查询。
Car.left_joins(:drivers).where(drivers: { id: nil }).pluck(:id)