2012-11-09 18 views
10

में ऑन क्लास में शर्त जोड़ना मेरे पास एक मॉडल ऑफ़र और अन्य ऐतिहासिक_ऑफर्स हैं, एक ऑफ़र में कई ऐतिहासिक_ऑफर्स हैं।ActiveRecord:

अब मैं एक दिन के ऐतिहासिक_ऑफर्स को ऑफ़र के सेट के लिए लोड करना चाहता हूं, यदि यह मौजूद है। इसके लिए, मुझे लगता है कि मुझे दिन को ऑन क्लॉज पर पास करने की ज़रूरत है, न कि WHERE क्लॉज, ताकि मुझे सभी ऑफ़र मिल जाए, जब भी दिन के लिए कोई ऐतिहासिक_फफर न हो। (: 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 ... 

मिलेगा लेकिन मैं चाहता हूँ

Offer.where (several_complex_conditions) .includes साथ

कहां खंड में नहीं, पर खंड में हालत के लिए:

SELECT * FROM offers 
LEFT OUTER JOIN historical_offers 
ON offers.id = historical_offers.offer_id AND day = '2012-11-09' 
WHERE ... 

मुझे लगता है कि मैं एक विशिष्ट Dat के लिए एक लैम्ब्डा शर्त के साथ has_many परिभाषा बदल सकता है ई, लेकिन मैं एक तारीख में कैसे पास करूंगा?

वैकल्पिक रूप से मैं लिख सकता है इस तरह mysqlf मिलती है:

Offer.where(several_complex_conditions) 
    .joins(["historical_offers ON offers.id = historical_offers.offer_id AND day = ?", Date.today]) 

लेकिन कैसे मैं इस ऊपर हुक कर सकते हैं ताकि उत्सुक लोड हो रहा है किया जाता है?

+0

एक [संबंधित प्रश्न] (http://stackoverflow.com/questions/15691558/refining-the-inner-join-when-using-includes -इन-एक्टिव्रेकॉर्ड/17737833 # 17737833) पर अधिक ध्यान दिया गया, लेकिन कोई भी बिल्कुल ठीक नहीं मिला जिसे आप ढूंढ रहे हैं। –

उत्तर

1

कुछ घंटों के बाद हेडक्रैचिंग और संबंधित रिकॉर्डों के एक सीमित सेट की उत्सुक लोडिंग को पूरा करने के सभी तरीकों का प्रयास करने के बाद मैं @ dbenhur के answer in this thread पर आया जो मेरे लिए ठीक काम करता है - हालांकि स्थिति कुछ ऐसा नहीं है जिसमें मैं गुजर रहा हूं (यह डेट.today से संबंधित एक तिथि है)। असल में यह उन स्थितियों के साथ एक संगठन बना रहा है जो मैं बाएं जॉइन में है जो कई स्थितियों में शामिल है।

has_many :prices, order: "rate_date" 
has_many :future_valid_prices, 
    class_name: 'Price', 
    conditions: ['rate_date > ? and rate is not null', Date.today-7.days] 

और फिर मेरी नियंत्रक में:

@property = current_agent.properties.includes(:future_valid_prices).find_by_id(params[:id])