Meine Driver
Modell has_many Workables
Wie frage ich nach einer Liste von Drivers
das haben ein workable
bei dem die vehicle_id
ist x
und has_vehicle
ist true
?
ich nicht einbeziehen wollen Drivers
mit zwei Workables, von denen eines das richtige hat vehicle_id
und der andere davon hat has_vehicle
== wahr
Idealerweise möchte ich wahrscheinlich einen Spielraum dafür.
Ich habe Folgendes versucht, aber es werden keine Datensätze zurückgegeben Driver.rb
:
scope :has_vehicle, -> (vehicle) {
joins(:workables).
where("workables.vehicle_id = ?", vehicle).
where("workables.has_vehicle = ?", true) }
Ich könnte einen solchen Ansatz wählen, aber er sieht sehr langsam aus:
arr = []
Workable.where(vehicle: x).where(has_vehicle == true).each do |e|
arr += e.drivers.map(&:id)
end
@drivers = @drivers.where(id: arr)
Ist das oben genannte schnell, wenn ich eifrig lade?
Antworten:
0 für die Antwort № 1Eine funktionale und ziemlich schnelle Methode gefunden:
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)