我有两个范围
named_scope :by_foo, lambda { |foo| { :conditions => {:foo => foo} } }
named_scope :by_bar, lambda { |bar| { :conditions => ["bar like ?", bar+"%"] } }
如何在一个范围内将它们混合在一起而不进行链接?
named_scope :by_baz # what that should look like ?
答案 0 :(得分:4)
named_scope :by_baz, lambda {|args| by_foo(args[:foo]).by_bar(args[:bar])}
您可以通过以下方式调用它:
Model.by_baz({:foo=>value, :bar=>value})
通过这种方式,您可以根据需要添加尽可能多的范围,而无需重写条件。
答案 1 :(得分:1)
named_scope :by_foo_and_bar, lambda { |foo, bar| { :conditions => ["foo = ? AND bar like ?", foo, bar+"%"] } }