Могу ли я создать область *un*named в Rails?

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

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

...

MyModel.active.find(...)

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

Под этим я подразумеваю, есть ли метод "foo", с помощью которого я могу пойти

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

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


person Gareth    schedule 16.12.2009    source источник


Ответы (1)


Да, проверьте Анонимные области действия:

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
person khelll    schedule 16.12.2009
comment
Это прекрасно, и это задокументировано только в одном файле [api.rubyonrails.org/classes/ ActiveRecord/NamedScope.html], который я не могу представить, чтобы я когда-либо смотрел на него иначе - person Gareth; 16.12.2009