2015-03-31 89 views
1

Driver模型的has_many Workables當子模型有兩個屬性

如何索要Drivers列表,有workable其中vehicle_idxhas_vehicletrue

希望包括Drivers有兩個workables,其中一個具有正確vehicle_id,而另一個有has_vehicle ==真

理想我可能要爲這樣的範圍。

我試過以下,但它不返回任何記錄,在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

是否有你'分離vehicle_id'(整數)和'has_vehicle'(布爾)的原因嗎?您可以通過'vehicle_id'中繼來確定'Driver'是否確實有車輛,而不是將其存儲在DB中 – MrYoshiji 2015-03-31 15:40:41

+0

是的,布爾值提供了新信息。駕駛員選擇他們想要使用的車輛,以及車輛是由他們自己還是由僱主提供。 – 2015-03-31 15:45:01

回答

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) 
相關問題