15

スコープを動的に生成したいと思います。次のモデルがあるとします。

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

scope呼び出しを POSSIBLE_SIZES 定数に基づいたものに置き換えることはできますか? それらを繰り返すのはDRYに違反していると思います。

4

3 に答える 3

38

あなたができる

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

しかし、私は個人的に好きです:

class Product < ActiveRecord::Base
  scope :sized, lambda{|size| where(size: size)}
end
于 2012-12-27T21:41:34.903 に答える
5

あなたはループを行うことができます

class Product < ActiveRecord::Base
    POSSIBLE_SIZES = [:small, :medium, :large]
    POSSIBLE_SIZES.each do |size|
        scope size, where(size: size)
    end
end
于 2012-12-27T21:40:10.480 に答える