使用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
我有cars_drivers
和car_id
的联接表patient_id
。
我想找到30岁及以上(driver.age > 30
)的驾驶员,驾驶本田(car.brand = "Honda"
),并找出找到的驾驶员数量。
答案 0 :(得分:0)
以原始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)
答案 1 :(得分:0)
这应该算上汽车:
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
之间有很多逻辑,但是这个设置你不能拥有验证,回调或其他字段。
我会创建一个名为CarDriver
的连接模型,或者如果有更多描述的内容,例如Job
或Delivery
,则将它们保存在自己的表中。这是关于这个主题的article。
答案 2 :(得分:0)
结束了这个:
@drivers =
Driver.
joins(:cars).
where(cars_drivers: {
driver_id: Driver.where('age > 30'),
complication_id: Car.find_by_model("Honda").id
}).
size