/ / Wobei das untergeordnete Modell zwei Attribute hat - Ruby-on-Rails

Wo Kindermodell zwei Attribute hat - Ruby-on-Rails

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_idund 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 № 1

Eine 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)