named_scopes の操作について質問があります。
私は次のモデルを持っているとしましょう(私が提供したnamed_scopeのいくつかは、アクティブレコードを介して直接達成できることを知っていますが、それらは単なる例です):
def person
named_scope :older_then, lambda {|min_age| {:conditions => ["age > ?",min_age]} }
named_scope :by_first_name, lambda {|name| {:conditions => {:first_name => name}}}
def self.some_function(age_param, name_param)
chain = Person
chain = chain.older_then(age_param) unless age_param.blank?
chain = chain.by_first_name(name_param) unless name_param.blank?
chain.all
end
end
今私が電話したいとしましょう:
people = Person.some_function(20, "john")
named_scopes のチェーンを構築している間、Rails は db に対して 2 つの呼び出しを行います。
select * from persons where age>20
select * from persons where age>20 and name='john'
明らかに、私が望んでいたのは 2 番目のクエリの結果だけであり、named_scopes のチェーンの構築中に最初のクエリが実行されることを意図していませんでした。ここで私が間違っていること/条件によって複数のnamed_scopeを組み合わせる正しい方法は何ですか?
ところで、私は古いRuby 1.8.7を使用しています... :(