在ActiveRecord中向关系结果添加列

时间:2015-03-18 08:26:03

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

我有一个Car模型和一个Driver模型

Car has_many :drivers

我对具有特定评级的驾驶员最近驾驶的汽车进行了查询

Car.recently_driven.joins(:drivers).merge(Driver.with_good_rating)

这会给我一份汽车清单。

如何访问在查询中选择了这些车辆的驱动程序?或者改写一下,如何将driver_id附加到导致查询的汽车行?

进一步澄清我的意图: 我希望上面的查询结果将是汽车的列,但与driver_id的另一列。所以我可以访问driver_id而无需再次查询

2 个答案:

答案 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))