查找数组中所有 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_drivers
与 car_id
和 patient_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
,看起来你在 Driver
和 Car
之间有很多逻辑,但是此设置不能有 validations、callbacks 或额外字段。
我会创建一个名为 CarDriver
的连接模型,或者如果有更多描述如 Job
或 Delivery
,并将它们保存在自己的 table 中。这是关于该主题的 article。
最后是这样的:
@drivers =
Driver.
joins(:cars).
where(cars_drivers: {
driver_id: Driver.where('age > 30'),
complication_id: Car.find_by_model("Honda").id
}).
size
使用 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_drivers
与 car_id
和 patient_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
,看起来你在 Driver
和 Car
之间有很多逻辑,但是此设置不能有 validations、callbacks 或额外字段。
我会创建一个名为 CarDriver
的连接模型,或者如果有更多描述如 Job
或 Delivery
,并将它们保存在自己的 table 中。这是关于该主题的 article。
最后是这样的:
@drivers =
Driver.
joins(:cars).
where(cars_drivers: {
driver_id: Driver.where('age > 30'),
complication_id: Car.find_by_model("Honda").id
}).
size