¿Puedo crear un * un * nombrado alcance en Rails?
-
19-09-2019 - |
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 .find
s u otras llamadas con ámbito de?
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