2010-07-23 16 views
5

रेल 2/3 के साथ डिफ़ॉल्ट_स्कोप के बारे में प्रश्न। मेरी रेल 3 प्रोजेक्ट पर, मैं create_at desc द्वारा ऑर्डर करने के लिए बहुत डिफ़ॉल्ट_स्कोप का उपयोग कर रहा हूं। तो सबसे पहले मैं ने लिखा है:ActiveRecord # default_scope विधि और डिफ़ॉल्ट ऑर्डरिंग

 
default_scope order("created_at desc") 

अपने मॉडल के कई में। लेकिन समस्या यह है कि create_at लगभग सभी अनुप्रयोग तालिकाओं में मौजूद है ... इसलिए यदि मैं एक क्वेरी लिखता हूं जो केवल दो तालिकाओं में शामिल होता है, तो मुझे SQL त्रुटि अस्पष्ट कॉलम बनाया गया है ... इसलिए मुझे फिर से लिखना पड़ा सभी TABLE_NAME शामिल करने के लिए default_scopes, जैसे:

 
default_scope order("posts.created_at desc") 

वहाँ एक बेहतर तरीका है इस समस्या को संभालने के लिए है या यह एकमात्र समाधान है?

धन्यवाद।

उत्तर

9

रेल में एसक्यूएल स्ट्रिंग का उपयोग करते समय आपको हमेशा तालिका का नाम निर्दिष्ट करना चाहिए ताकि आप इन अस्पष्टताओं से बच सकें। ध्यान दें कि आप कर सकते हैं:

default_scope order("#{table_name}.created_at desc") 
+0

मैं इसे बैकटिक्स ('\' ') में लपेटने का सुझाव भी दूंगा। –

+2

बैकटिक्स MySQL के लिए ठीक हैं लेकिन ध्यान रखें कि वे एएनएसआई-एसक्यूएल मानक का हिस्सा नहीं हैं, इसलिए अन्य डेटाबेस सर्वरों के साथ समस्याएं हो सकती हैं। –

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