我有一个Car模型和一个Driver模型
Car has_many :drivers
我对具有特定评级的驾驶员最近驾驶的汽车进行了查询
Car.recently_driven.joins(:drivers).merge(Driver.with_good_rating)
这会给我一份汽车清单。
如何访问在查询中选择了这些车辆的驱动程序?或者改写一下,如何将driver_id附加到导致查询的汽车行?
进一步澄清我的意图: 我希望上面的查询结果将是汽车的列,但与driver_id的另一列。所以我可以访问driver_id而无需再次查询
答案 0 :(得分:1)
Car.recently_driven.joins(:drivers).includes(:drivers).merge(Driver.with_good_rating) # will give you what you already have, but with reduced queryes
然后,您可以使用map
Car.recently_driven.joins(:drivers).merge(Driver.with_good_rating).map do |car|
[car, car.driver_ids]
end
将返回:
[
[car_object, driver_ids],
...
[car_object, driver_ids],
]
您可以尝试使用DB
解决方案,但不确定它是否适用于您的示例。
cars = Car.recently_driven.joins(:drivers).includes(:drivers).merge(Driver.with_good_rating)
然后
first_car = cars.first
driver_ids_f = first_car.driver_ids # it will not make DB query, it is loaded bot not shown
答案 1 :(得分:0)
获取选择了这些车辆的所有司机
首先以您的方式获取局部变量
cars = Car.recently_driven.joins(:drivers).merge(Driver.with_good_rating)
然后使用
获取所有驱动程序drivers = Driver.find_by(car_id: cars.pluck(:id))