モデル オファーと別の history_offers があり、1 つのオファーには多くの history_offers があります。
ここで、一連のオファーがある場合、特定の日の history_offers を熱心にロードしたいと思います。このため、指定された日の history_offer がない場合でも、すべてのオファーを取得できるように、その日を WHERE 句ではなく ON 句に渡す必要があると思います。
Offer.where(several_complex_conditions).includes(:historical_offers).where("historical_offers.day = ?", Date.today) を使用
私は得るだろう
SELECT * FROM offers
LEFT OUTER JOIN historical_offers
ON offers.id = historical_offers.offer_id
WHERE day = '2012-11-09' AND ...
しかし、WHERE 句ではなく、ON 句に条件が必要です。
SELECT * FROM offers
LEFT OUTER JOIN historical_offers
ON offers.id = historical_offers.offer_id AND day = '2012-11-09'
WHERE ...
特定の日付のラムダ条件で has_many 定義を変更できると思いますが、その場合、どのように日付を渡すのでしょうか?
あるいは、結合 mysqlf を次のように書くこともできます。
Offer.where(several_complex_conditions)
.joins(["historical_offers ON offers.id = historical_offers.offer_id AND day = ?", Date.today])
しかし、熱心な読み込みが行われるようにするにはどうすればよいでしょうか?