查找数组中所有 objects 的关联模型

Find associated model of all objects in an array

使用 Rails 4,我有以下内容:

class Driver < ActiveRecord::Base
  has_and_belongs_to_many :cars, dependent: :destroy
end

class Car < ActiveRecord::Base
  has_and_belongs_to_many :drivers
end

我有一个连接 table cars_driverscar_idpatient_id

我想找到 30 岁及以上 (driver.age > 30) 驾驶本田 (car.brand = "Honda") 的司机,并对找到的司机数量求和。

以原始 SQL 方式:

sql = "
SELECT
SUM (driver), age, brand 
FROM cars_drivers 
JOIN cars, drivers 
ON cars_drivers.car_id = cars.id
ON cars_drivers.driver_id = drivers.id    
where 
age > 30
and brand = "Honda"
"

records_array = ActiveRecord::Base.connection.execute(sql)

这应该算汽车:

Car.where(brand: BRAND).includes(:drivers).where('drivers.age > ?', AGE).count

这应该包括驱动程序:

Driver.where('age > ?', AGE).includes(:cars).where('cars.brand = ?', BRAND).count

我确实建议 不要 使用 has_and_belongs_to_many,看起来你在 DriverCar 之间有很多逻辑,但是此设置不能有 validationscallbacks 或额外字段。

我会创建一个名为 CarDriver 的连接模型,或者如果有更多描述如 JobDelivery,并将它们保存在自己的 table 中。这是关于该主题的 article

最后是这样的:

@drivers =
  Driver.
    joins(:cars).
    where(cars_drivers: {
      driver_id: Driver.where('age > 30'),
      complication_id: Car.find_by_model("Honda").id
    }).
    size