2011-06-01 23 views
5

मुझे यह पता नहीं है कि यह संभव है या नहीं? मुझे स्कोप के साथ/भीतर आवृत्ति विधि का उपयोग करने की आवश्यकता है। कुछ इस तरह:दायरे में उदाहरण विधि

scope :public, lambda{ where ({:public => true}) } 

और प्रत्येक रिकॉर्ड पर उदाहरण उदाहरण (पूर्ण?) को कॉल करने के लिए यह देखने के लिए कि यह पूरा हो गया है या नहीं। सार्वजनिक दायरे को सार्वजनिक रूप से सभी रिकॉर्ड वापस कर देना चाहिए और पूरा हो गया है और रिकॉर्ड का पूरा होना एक उदाहरण विधि 'पूर्ण' द्वारा निर्धारित किया जाता है?

कोई संभावना है?

धन्यवाद

+0

हो सकता है कि एक लैम्ब्डा पूरा युक्त भेजें? दायरे lambda के लिए एक पैरामीटर के रूप में तर्क? – Zabba

उत्तर

10

कार्यक्षेत्र क्वेरी तर्क अरेल का उपयोग कर पैदा करने के बारे में हैं। यदि आप पूर्ण के तर्क का प्रतिनिधित्व नहीं कर सकते हैं? एसक्यूएल में विधि तो आप

स्कॉप्स - कम से कम रेल 3 में - परिणाम सेट को वापस किए बिना क्वेरी तर्क को एक साथ करने के लिए हैं। आप एक परिणाम के पूरा करने के लिए अपने परीक्षण करने के लिए सेट की जरूरत है आप

class MyModel < ActiveRecord::Base 
    scope :public, lambda{ where ({:public => true}) } 

    def self.completed_public_records 
    MyModel.public.all.select { |r| r.completed? } 
    end 
end 

# elsewhere 
MyModel.completed_public_records 

की तरह कुछ करने की आवश्यकता होगी या आप और अधिक लचीलापन

class MyModel < ActiveRecord::Base 
    scope :public, lambda{ where ({:public => true}) } 
    # some other scopes etc 


    def self.completed_filter(finder_obj) 
    unless finder_obj.is_a?(ActiveRecord::Relation) 
     raise ArgumentError, "An ActiveRecord::Relation object is required" 
    end 
    finder_obj.all.select { |r| r.completed? } 
    end 
end 

# elsewhere 
MyModel.completed_filter(MyModel.public.another_scope.some_other_scope) 
+0

मैं पहले दृष्टिकोण के बारे में सोच रहा था लेकिन बिना किसी गुंजाइश के। इसका मतलब है कि क्लास विधि का उपयोग सार्वजनिक कहा जाता है और सभी सार्वजनिक रिकॉर्ड ढूंढते हैं और फिर पूरा करके फ़िल्टरिंग करते हैं? विधि लेकिन देखना चाहता था कि क्या स्कोप का उपयोग करके ऐसा करने के कोई तरीके हैं या नहीं। इसके अलावा, मैं पूरा तर्क का प्रतिनिधित्व नहीं कर सकता? क्वेरी भाषा में विधि इसलिए मुझे लगता है कि मुझे कक्षा विधि का उपयोग करने की आवश्यकता है। – bikashp

0

मैं इस सटीक समस्या में कुछ के लिए एक rubygem बनाया की जरूरत है महीने पहले जब मुझे एक ही समस्या थी।

यह आपको क्वेरी के परिणाम सेट पर काम करने वाली विधियों को जोड़ने की अनुमति देता है, लेकिन विधियों को किसी अन्य वर्ग में सारणीबद्ध करता है ताकि यह आपके मॉडल के साथ उलझन में न हो।

इसे देखें: https://github.com/coryodaniel/collectively

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