Ho un modello offre e un altro storico_offerte, una offerta ha_many historical_offerte.ActiveRecord: aggiunta della condizione alla clausola ON per include
Ora vorrei caricare con impazienza lo storico di un determinato giorno per un insieme di offerte, se esiste. Per questo, penso di aver bisogno di passare il giorno alla clausola ON, non alla clausola WHERE, in modo da ottenere tutte le offerte, anche quando non ci sono offerte storiche per il giorno dato.
Con Offer.where (several_complex_conditions) .includes (: historical_offers) .dove ("historical_offers.day =?", Date.today)
vorrei avere
SELECT * FROM offers
LEFT OUTER JOIN historical_offers
ON offers.id = historical_offers.offer_id
WHERE day = '2012-11-09' AND ...
Ma voglio per avere la condizione nella clausola ON, non nella clausola WHERE:
SELECT * FROM offers
LEFT OUTER JOIN historical_offers
ON offers.id = historical_offers.offer_id AND day = '2012-11-09'
WHERE ...
Credo che avrei potuto modificare la definizione has_many con una condizione lambda per un dat specifica e, ma come dovrei passare in una data allora?
In alternativa potrei scrivere il mysqlf unisce in questo modo:
Offer.where(several_complex_conditions)
.joins(["historical_offers ON offers.id = historical_offers.offer_id AND day = ?", Date.today])
Ma come posso agganciare questo in modo che eager loading è fatto?
A [domanda relativa] (http://stackoverflow.com/questions/15691558/refining-the-inner-join-when-using-includes -in-activerecord/17737833 # 17737833) ha ricevuto più attenzione, ma nessuno ha dato esattamente quello che stai cercando. –