Puis-je créer un * un * nom portée dans Rails?
-
19-09-2019 - |
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 .find
s ou d'autres appels scope sur?
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