Pregunta

Sé que usted puede crear ámbitos mencionados en los carriles, que le permiten especificar las condiciones que a continuación se pueden construir más adelante:

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

...

MyModel.active.find(...)

Esto funciona mediante la creación de un objeto proxy que no se evalúa hasta más tarde. Lo que yo quiero saber es si es posible crear una dinámica un ámbito con nombre?

Por lo cual quiero decir, ¿existe un método 'foo' con la que puedo ir

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

y luego pasar scope su alrededor como un objeto proxy que puedo hacer más .finds u otras llamadas con ámbito de?

¿Fue útil?

Solución

Sí, compruebe Scopes anónimos :

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top