2017-02-10 3 views
1

Die folgende AbfrageWie macht man einen linken äußeren Join in einem eager_load in Rails?

Install.eager_load(customer: :invoices).includes(calendar_appointment: :technician).where("state = 'scheduled' AND start_time < ?", Date.tomorrow)

wirklich langsam ist, würde ich nur lieben die Installiert zurück, die Rechnungen nicht verbunden sind, wie es schneller laufen würde. Wie würde ich das machen? Auch Ideen zur Verbesserung der Geschwindigkeit dieser Abfrage wären hilfreich, die entsprechenden Tabellen sind indiziert.

+0

Sie können 'joins' verwenden und schreiben Sie einfach in den Zustand kommen,' verbindet ("innere Verknüpfung Kunden auf ... ... was auch immer ') ' – Iceman

+1

' Ich würde gerne nur die Installer zurückgeben, die keine zugehörigen Rechnungen haben 'Warum also Sie eager_loading Kunden mit Rechnungen? –

+0

Installationen werden über Kunden mit Rechnungen verknüpft –

Antwort

0

nicht sicher, wie genau die Zuordnung definiert ist, aber hier mein Stich ist es:

Install 
.joins("inner join invoices on installs.id = invoices.install_id") 
.includes(calendar_appointment: :technician) 
.where("state = 'scheduled' AND start_time < ? AND invoices.install_id IS NULL", Date.tomorrow) 
Verwandte Themen