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ù .finds o altre chiamate di ambito su?

È stato utile?

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
scroll top