Rails 2合并模型中范围的条件

时间:2012-03-20 14:04:00

标签: sql ruby-on-rails activerecord

我有两个范围

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 ?   

2 个答案:

答案 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+"%"] } }