Posso creare una * un * chiamato portata in Rails?
-
19-09-2019 - |
Domanda
So che è possibile creare ambiti denominati in Rails, che consentono di specificare le condizioni che possono poi essere costruiti in un secondo momento:
named_scope :active, :conditions => {:active => true}
...
MyModel.active.find(...)
Questo funziona con la creazione di un oggetto proxy che non viene valutata fino al più tardi. Quello che voglio sapere è se è possibile creare una dinamica un di nome portata?
Con questo intendo, c'è un metodo 'foo' con cui posso andare
scope = MyModel.foo(:conditions => {:target_id => 4})
e quindi passare scope
intorno come un oggetto proxy che posso fare più .find
s o altre chiamate di ambito su?
Soluzione
Sì, controllare anonimi 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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow