2012-03-20 9 views
1

でスコープの2つの合併の条件私は2つのスコープRailsのモデル

私が連鎖することなく、1つのスコープにそれらを一緒に混在させることができますどのように
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

非常に読みやすくDRYソリューション、素晴らしい、thx – astropanic

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

ありがとうございますが、これは入力スコープのいずれかを変更したときにコードの重複を暗示します。これもまた書き直す必要があります – astropanic