У меня есть вопрос, касающийся работы с named_scopes:СЦЕПЛЕНИЕ 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 составит 2 вызовы к БД:
select * from persons where age>20
select * from persons where age>20 and name='john'
, очевидно, все, что я хотел был результат второго запроса и техника его подводит Подразумевается, что первый запрос будет выполняться при построении цепочки named_scopes. любые идеи, что я делаю неправильно здесь/Каков правильный способ объединить несколько named_scope по условиям?
BTW, я использую рубин 1.8.7 его старый, я знаю ... :(
Если вы не используете старую версию Rails, вы должны использовать 'scope', а не' named_scope'. – meagar
@meagar: OP, по-видимому, использует Rails 2.x – PinnyM
Yap, используя рельсы 2.3.11 – Ran