2017-02-10 5 views
1

次のクエリRailsのeager_loadで左外部結合を行うには?

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

は本当に遅いですが、私は唯一に愛することは、それを高速に実行するだろうとして、請求書が関連付けられていませんインストールしを返します。それをどうやってやりますか?また、このクエリの速度を向上させるためのアイデアは参考になり、適切なテーブルのインデックスが作成されます。

+0

は、' 'の内側には上の顧客への参加(参加します... ... whatever ') ' – Iceman

+1

'関連する請求書がないInstallsのみを返すのが大好きです。なぜあなたはeager_loading customer with invoicesですか? –

+0

インストールは顧客から請求書と関連付けられます –

答えて

0

ない正確にどのように関連付けが定義されていますが、ここではそれで私の刺し傷があります確認:あなたは `joins`を使用して、ちょうど結合条件に書くことができます

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) 
関連する問題