2012-12-27 29 views
9

मैं गतिशील रूप से स्कॉप्स उत्पन्न करना चाहता हूं।रेल मॉडल में गतिशील रूप से स्कॉप्स उत्पन्न करें

class Product < ActiveRecord::Base 
    POSSIBLE_SIZES = [:small, :medium, :large] 
    scope :small, where(size: :small) 
    scope :medium, where(size: :medium) 
    scope :large, where(size: :large) 
end 

हम POSSIBLE_SIZES निरंतर आधार पर कुछ के साथ scope कॉल जगह ले सकता है: मान लीजिए मैं निम्नलिखित मॉडल करते हैं? मुझे लगता है कि मैं उन्हें दोहराने के लिए ड्रवाई का उल्लंघन कर रहा हूं।

उत्तर

27

कर सकते हैं, लेकिन मैं व्यक्तिगत रूप से पसंद करते हैं:

class Product < ActiveRecord::Base 
    scope :sized, lambda{|size| where(size: size)} 
end 
+1

बहुत साफ है, धन्यवाद! (और हाँ, मैं तर्क के साथ scopes के बारे में पता है। मुझे लगता है कि यह मेरे विशिष्ट मामले में क्लीनर है) – spike

2

क्या आप

class Product < ActiveRecord::Base 
    [:small, :medium, :large].each do |s| 
    scope s, where(size: s) 
    end 
end 

कर सकता है एक पाश

class Product < ActiveRecord::Base 
    POSSIBLE_SIZES = [:small, :medium, :large] 
    POSSIBLE_SIZES.each do |size| 
     scope size, where(size: size) 
    end 
end 
संबंधित मुद्दे