2009-12-16 1 views
4

Я знаю, что вы можете создать именованные группы в Rails, которые позволяют определить условия, которые затем могут быть построены позже:Могу ли я создать область * un * named в Rails?

named_scope :active, :conditions => {:active => true} 

... 

MyModel.active.find(...) 

Это работает путем создания прокси-объекта, который не вычисляется, пока позже. Я хочу знать, можно ли создать динамический un с именем scope?

я имею в виду, есть метод «Foo», с которым я могу пойти

scope = MyModel.foo(:conditions => {:target_id => 4}) 

, а затем передать scope вокруг как прокси-объект, который я могу сделать больше .find с или другие контекстными звонки на?

ответ

7

Да, проверить Anonymous Scopes:

def find_products 
    scope = Product.scoped({}) 
    scope = scope.conditions "products.name LIKE ?", "%#{keywords}%" unless keywords.blank? 
    scope = scope.conditions "products.price >= ?", minimum_price unless minimum_price.blank? 
    scope = scope.conditions "products.price <= ?", maximum_price unless maximum_price.blank? 
    scope = scope.conditions "products.category_id = ?", category_id unless category_id.blank? 
    scope 
end 
+1

Это отлично, и это только задокументированы в одном файле [http://api.rubyonrails.org/classes/ActiveRecord/NamedScope.html], который я не могу себе представить, Я бы никогда не посмотрел – Gareth

Смежные вопросы