मेरे पास कुछ मॉडल हैं जिन पर कस्टम खोज स्थितियां रखने की आवश्यकता है। उदाहरण के लिए, यदि मेरे पास एक संपर्क मॉडल है, तो हर बार Contact.find कहा जाता है, मैं उन संपर्कों को प्रतिबंधित करना चाहता हूं जो केवल उपयोग में खाते से संबंधित हैं।ActiveRecord में "ढूंढें" ओवरराइड करना DRY तरीका
मैं गूगल (जो मैं एक छोटे से कस्टमाइज़ कर दिया है) के माध्यम से इस पाया:
def self.find(*args)
with_scope(:find => { :conditions => "#{self.to_s.downcase.pluralize}.account_id = #{$account.id}" }) do
super(*args)
end
end
:
def self.find(*args)
with_scope(:find => { :conditions => "account_id = #{$account.id}" }) do
super(*args)
end
end
यह महान काम करता है, कुछ अवसरों जहां ACCOUNT_ID अस्पष्ट है के लिए छोड़कर तो मैं यह करने के लिए अनुकूलित
यह भी बहुत अच्छा काम करता है, हालांकि, मैं इसे शुष्क बनाना चाहता हूं। अब मेरे पास कुछ अलग मॉडल हैं जो मैं इस तरह के फ़ंक्शन का उपयोग करना चाहता हूं। इसे करने का बेहतरीन तरीका क्या है?
जब आप उत्तर देते हैं, तो कृपया हमारे दिमाग को मेटाप्रोग्रामिंग रूबी-फु को समझने में मदद करने के लिए कोड शामिल करें।
(मैं रेल v2.1 उपयोग कर रहा हूँ)
धन्यवाद जीन, कि एक का इलाज काम करते हैं और शायद सही तरीका है जाएगा इसे करने के लिए। खाता का परिचय मौजूदा कोड के लिए एक नया जोड़ा है, इसलिए मुझे लगता है कि मैं उस परिप्रेक्ष्य से आने से जटिल चीजों से अधिक था। मैं खाता द्वारा स्कॉप्ड होने के लिए मौजूदा कोड को जाकर संशोधित कर दूंगा। –