ActiveRecord: Bedingung zur ON-Klausel für Includes hinzufügen
Ich habe ein Modellangebot und ein anderes historisches Angebot, ein Angebot hat viele historische Angebote.
Jetzt möchte ich eifrig die historischen_Angebote eines bestimmten Tages für eine Reihe von Angeboten laden, falls vorhanden. Ich denke, ich muss den Tag an die ON-Klausel übergeben, nicht an die WHERE-Klausel, damit ich alle Angebote erhalte, auch wenn für den angegebenen Tag kein history_offer vorhanden ist.
Mit Offer.where (mehrere_komplexe_Bedingungen) .includes (: historical_offers) .where ("historical_offers.day =?", Date.today)
ich würde bekommen
SELECT * FROM offers
LEFT OUTER JOIN historical_offers
ON offers.id = historical_offers.offer_id
WHERE day = '2012-11-09' AND ...
Aber ich möchte die Bedingung in der ON-Klausel haben, nicht in der WHERE-Klausel:
SELECT * FROM offers
LEFT OUTER JOIN historical_offers
ON offers.id = historical_offers.offer_id AND day = '2012-11-09'
WHERE ...
Ich schätze, ich könnte die has_many-Definition mit einer Lambda-Bedingung für ein bestimmtes Datum ändern, aber wie würde ich dann ein Datum übergeben?
Alternativ könnte ich die Joins mysqlf so schreiben:
Offer.where(several_complex_conditions)
.joins(["historical_offers ON offers.id = historical_offers.offer_id AND day = ?", Date.today])
Aber wie kann ich das so anschließen, dass eifriges Laden erfolgt?