ActiveRecord: Dodanie warunku do klauzuli ON dla włączeń
Mam model oferty i inne oferty historyczne, jedna oferta ma wiele ofert historycznych.
Chciałbym teraz załadować oferty historyczne jednego dnia dla zestawu ofert, jeśli istnieje. W tym celu myślę, że muszę przekazać dzień klauzuli ON, a nie klauzuli WHERE, aby uzyskać wszystkie oferty, także wtedy, gdy nie ma oferty historycznej na dany dzień.
With Offer.where (several_complex_conditions) .includes (: historical_offers) .where ("historical_offers.day =?", Date.today)
Dostałbym
SELECT * FROM offers
LEFT OUTER JOIN historical_offers
ON offers.id = historical_offers.offer_id
WHERE day = '2012-11-09' AND ...
Ale chcę mieć warunek w klauzuli ON, a nie w klauzuli WHERE:
SELECT * FROM offers
LEFT OUTER JOIN historical_offers
ON offers.id = historical_offers.offer_id AND day = '2012-11-09'
WHERE ...
Myślę, że mógłbym zmienić definicję has_many ze stanem lambda na konkretną datę, ale w jaki sposób mógłbym przekazać datę?
Alternatywnie mógłbym napisać złączenia mysqlf w następujący sposób:
Offer.where(several_complex_conditions)
.joins(["historical_offers ON offers.id = historical_offers.offer_id AND day = ?", Date.today])
Ale jak mogę to podłączyć, aby zrobić szybkie ładowanie?