2012-03-20 58 views
1

范围,我有两个范围梁2合并条件模型

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 ? 

回答

4

named_scope :by_baz, lambda {|args| by_foo(args[:foo]).by_bar(args[:bar])}

您可以通过调用它:

Model.by_baz({:foo=>value, :bar=>value})

这样,只要你喜欢,不重写条件,你可以添加尽可能多的范围。

+0

非常可读和干燥的解决方案,真棒,thx – astropanic 2012-03-21 08:50:00

1
named_scope :by_foo_and_bar, lambda { |foo, bar| { :conditions => ["foo = ? AND bar like ?", foo, bar+"%"] } } 
+0

谢谢,但这代表重复代码,当您更改其中一个输入范围时,您也需要重写此代码 – astropanic 2012-03-21 08:51:00