2012-12-27 31 views
9

kapsamları oluşturmak için kapsamları dinamik olarak oluşturmak istiyorum.Dinamik olarak, kapsamları

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 

biz sürekli POSSIBLE_SIZES dayalı bir şeyle scope aramaları değiştirebilir miyim: ı aşağıdaki modeli var diyelim? Onları tekrarlamak için DRY'yi ihlal ettiğimi düşünüyorum.

cevap

27

yapabilirsiniz ama ben şahsen tercih:

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

Çok düzgün, teşekkürler! (ve evet, argümanlar içeren kapsamları biliyorum. Sanırım bu durum benim durumumda daha temizdir) – spike

2

Eğer

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

yapabileceği bir döngü

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