Могу ли я создать *un* именованную область в Rails?
Я знаю, что вы можете создавать именованные области в Rails, которые позволяют вам указывать условия, которые затем могут быть построены позже:
named_scope :active, :conditions => {:active => true}
...
MyModel.active.find(...)
Это работает путем создания прокси-объекта, который не будет оцениваться до тех пор. Я хочу знать, возможно ли создать динамическую область без имени?
Я имею в виду, есть ли метод "Foo", с помощью которого я могу пойти
scope = MyModel.foo(:conditions => {:target_id => 4})
а затем пройти scope
вокруг как прокси-объект, который я могу сделать больше .find
s или другие звонки в области?
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