Могу ли я создать * un * именованную область в Rails? - PullRequest
4 голосов
/ 16 декабря 2009

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

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

...

MyModel.active.find(...)

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

Я имею в виду, есть ли метод 'foo', с помощью которого я могу пойти

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

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

1 Ответ

7 голосов
/ 16 декабря 2009

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

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
...