2016-03-13 4 views
0

Использование 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), управляет Honda (car.brand = "Honda") и суммирует количество найденных драйверов.

ответ

0

Законченное с этим:

@drivers = 
    Driver. 
    joins(:cars). 
    where(cars_drivers: { 
     driver_id: Driver.where('age > 30'), 
     complication_id: Car.find_by_model("Honda").id 
    }). 
    size 
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) 
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 и, но с этой настройкой вы не можете получить валидации, обратные вызовы или дополнительные поля.

Я бы создал модель объединения под названием CarDriver, или если есть что-то еще более описывающее, как Job или Delivery и сохранить их в своей таблице. Вот article по этому вопросу.