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

时间:2016-03-13 11:01:24

标签: ruby-on-rails ruby-on-rails-4 activemodel

使用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_driverscar_id的联接表patient_id

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

3 个答案:

答案 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 ,好像你在DriverCar之间有很多逻辑,但是这个设置你不能拥有验证回调或其他字段。

我会创建一个名为CarDriver的连接模型,或者如果有更多描述的内容,例如JobDelivery,则将它们保存在自己的表中。这是关于这个主题的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