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?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage