Pregunta

¿Existe alguna forma de agregar una condición de búsqueda a todos los modelos de registros activos?

es decir me gustaría esta consulta

ExampleModel.find :all, :conditions=> ["status = ?", "active"]

comportarse de la misma manera que

ExampleModel.find :all

en cada modelo

¡¡Gracias!!

¿Fue útil?

Solución

Se puede usar default_scope :

class ExampleModel < ActiveRecord::Base
  default_scope :conditions => ["status = ?", "active"]
end

Si desea utilizar esto en todos sus modelos, puede ActiveRecord::Base subclase y deducir de que en todos sus modelos (probablemente no funciona bien con la herencia de una sola mesa):

class MyModel < ActiveRecord::Base
  default_scope :conditions => ["status = ?", "active"]
end
class ExampleModel < MyModel
end

... o usted podría establecer el default_scope en ActiveRecord::Base sí (podría ser molesto si usted decide que un modelo no debería tener este ámbito predeterminado):

class ActiveRecord::Base
  default_scope :conditions => ["status = ?", "active"]
end
class ExampleModel < ActiveRecord::Base
end

Según lo mencionado por klochner en un comentario, es posible que también desee considerar la adición de un named_scope a ActiveRecord::Base, llamado active, por ejemplo:

class ActiveRecord::Base
  named_scope :active, :conditions => ["status = ?", "active"]
end
class ExampleModel < ActiveRecord::Base
end
ExampleModel.active  # Return all active items.

Otros consejos

Actualización: named_scope era href="http://apidock.com/rails/ActiveRecord/NamedScope/ClassMethods/named_scope" rel="nofollow"> obsoleto / renombrado en los carriles 3.1. A partir de 3.2.8, el nuevo método se llama scope que utiliza el método where en lugar de :conditions

antigua:

named_scope :active, :conditions => ["status = ?", "active"]

New:

scope :active, where(:status => "active")

o

scope :active, where("status = ?", "active")
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top