2012-04-13 16 views
5

मैं रनटाइम डेटा का उपयोग कर एक ActiveRecord क्वेरी को एकसाथ टुकड़ा करना चाहता हूं। मेरे मन में क्या कुछ है ...मैं लाइन द्वारा लाइन में वृद्धिशील रूप से ActiveRecord क्वेरी कैसे बना सकता हूं?

r = Person.where('last_name LIKE ?', foo) 
r.where('created_at < ?', Time.now - 100.days) 
r.where(...some other conditions...) 

हालांकि यह इरादा के रूप में काम नहीं करता है। प्राप्त करने के लिए यह काम करने के लिए आप उन्हें श्रृंखला एक साथ एक लाइन में सब करने के लिए है ...

Person.where('last_name LIKE ?', foo) \ 
    .where('created_at < ?', Time.now - 100.days) \ 
    .where(...some other conditions...) 

मैं एकाधिक पंक्तियों में अलग परिचालन पर यह प्रसार करने के लिए एक तरह से यह पता लगाने की कोशिश कर रहा हूँ।

उत्तर

17

Query Interface विधियां (जैसे .where) एक नई वस्तु वापस करें। तो आपको बस इसे पकड़ना है। देखें:

r = Person.where('last_name LIKE ?', foo) 
r = r.where('created_at < ?', Time.now - 100.days) 
r = r.where(...some other conditions...) 
2

अरेल निराशाजनक रूप से ऑब्जेक्ट या अंतर्निहित क्वेरी को म्यूटेट नहीं करता है जब आप इसकी विधियों को कॉल करते हैं। लेकिन प्रत्येक विधि एरियल ऑब्जेक्ट को वापस कर देती है, जो चेनिंग की अनुमति देती है। अलग तो यह कैसे व्यवहार करने के लिए चाहिए यह * लगता है

r = Person.where(... 
r = r.where('created_at...') 

आदि, आदि

+3

मैं नहीं बल्कि एक बग से एक विशेषता के रूप में यह इलाज :) –

+1

*: आप क्या करना है। लेकिन शायद यह सिर्फ मुझे है। मेरे पास पहले समस्याएं थीं जहां मैं गलती से एक एआरएल विधि को कॉल करने के बाद चर को फिर से असाइन करना भूल गया था और मुझे अपेक्षित नतीजे नहीं मिल रहे थे। तो ... मैं इसे निराशाजनक कहता हूं: पी – nzifnab

+0

आदर्श रूप से यह उत्परिवर्तन के लिए एक धमाकेदार संस्करण का समर्थन करेगा, यानी 'आर। कहीं! 'बनाया_at ...' ' – mahemoff

संबंधित मुद्दे