Question

Je sais que vous pouvez créer des étendues nommées dans Rails, qui vous permettent de spécifier les conditions qui peuvent ensuite être construites sur plus tard:

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

...

MyModel.active.find(...)

Cela fonctionne en créant un objet proxy qui n'est pas évalué que plus tard. Ce que je veux savoir est s'il est possible de créer une dynamique un named scope?

Par ce que je veux dire, est-il une méthode « foo » avec laquelle je peux aller

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

puis passer scope autour comme un objet proxy que je peux faire plus .finds ou d'autres appels scope sur?

Était-ce utile?

La solution

Oui, consultez Anonyme 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top