我的Driver
模型has_many Workables
如何要求Drivers
workable
vehicle_id
为x
且has_vehicle
为true
的{{1}}列表?
我不希望包含Drivers
两个可行的,其中一个具有正确的vehicle_id
,另一个具有has_vehicle
} == true
理想情况下,我可能想要一个范围。
我已尝试过以下操作,但在Driver.rb
中没有返回任何记录:
scope :has_vehicle, -> (vehicle) {
joins(:workables).
where('workables.vehicle_id = ?', vehicle).
where('workables.has_vehicle = ?', true) }
我可以选择这样的方法,但它看起来非常慢:
arr = []
Workable.where(vehicle: x).where(has_vehicle == true).each do |e|
arr += e.drivers.map(&:id)
end
@drivers = @drivers.where(id: arr)
如果我使用预先加载,上述速度是否快?
答案 0 :(得分:0)
找到一种功能强大且速度相当快的方法:
driver_ids = Workable.where(driver_id: @drivers.collect(&:id)).where('vehicle_id = ? and has_vehicle = ?', params[:vehicle].to_i, true).collect(&:driver_id)
@drivers = @drivers.where(id: driver_ids)