सबसे पहले, first
और last
उतना आसान नहीं है जितना आपको लगता है कि वे हैं:आप पूरी तरह से limit
. की उपेक्षा कर रहे हैं तर्क है कि ये दोनों विधियां समर्थन करती हैं।
दूसरा, scope
प्रश्नों को वापस करने के उद्देश्य से क्लास विधियों को जोड़ने का एक शानदार तरीका है। आपके कार्यक्षेत्र scope
का दुरुपयोग कर रहे हैं क्योंकि वे प्रश्नों के बजाय एकल मॉडल उदाहरण लौटाते हैं। आप scope
का उपयोग नहीं करना चाहते बिल्कुल भी, आप बस first
. को बदलने का प्रयास कर रहे हैं और last
वर्ग विधियों तो आप उन्हें ओवरराइड क्यों नहीं करते? हालांकि आपको उन्हें ठीक से ओवरराइड करने की आवश्यकता होगी और इसके लिए रेल स्रोत को पढ़ने और समझने की आवश्यकता होगी ताकि आप ठीक से नकल कर सकें कि find_nth_with_limit
करता है। आप second
को ओवरराइड करना चाहेंगे , third
, ... और बाकी मूर्खतापूर्ण तरीके जब आप इसमें हों।
यदि आप first
को बदलने के बारे में सही नहीं समझते हैं और last
(एक अच्छी बात आईएमओ), तो आप वांछित चीजों को ऑर्डर करने के लिए एक डिफ़ॉल्ट दायरा जोड़ सकते हैं:
default_scope -> { order(:created_at) }
बेशक, डिफ़ॉल्ट स्कोप समस्याओं के अपने सेट के साथ आते हैं और चीजों को ORDER BY में इस तरह से छिपाते हैं, शायद आपको reorder
जब भी आप वास्तव में ORDER BY निर्दिष्ट करना चाहते हैं; याद रखें कि order
. के लिए कई कॉल नई ऑर्डरिंग शर्तें जोड़ें, वे पहले से मौजूद शर्तों को प्रतिस्थापित नहीं करती हैं।
वैकल्पिक रूप से, यदि आप Rails6+ का उपयोग कर रहे हैं, तो आप Markus's implicit_order_column
का उपयोग कर सकते हैं। समाधान
उन सभी समस्याओं से बचने के लिए जो डिफ़ॉल्ट कार्यक्षेत्र पैदा कर सकते हैं।
मुझे लगता है कि आप यह सब गलत कर रहे हैं। जब भी मुझे M.first
दिखाई देता है मुझे लगता है कि कुछ भूल गया है। id
. के आधार पर चीज़ें ऑर्डर करना काफी बेकार है इसलिए आपको हमेशा first
. जैसी विधियों का उपयोग करने से पहले अपने इच्छित क्रम को मैन्युअल रूप से निर्दिष्ट करें और last
।