raw rails query joins inner active ruby-on-rails activerecord arel active-relation

ruby on rails - query - Rails/Arel: seleccionando todos los registros como ActiveRecord:: Relation



ruby rails active record (3)

Uso de Arel in Rails: estoy buscando una forma de crear una relación ActiveRecord::Relation que resulte efectivamente en la SELECT * FROM table , que aún puedo manipular más.

Por ejemplo, tengo un modelo que se divide en varias categorías y devuelvo recuentos para estos de la siguiente manera:

relation = Model.where(:archived => false) # all non-archived records record_counts = { :total => relation.count, :for_sale => relation.where(:for_sale => true).count :on_auction => relation.where(:on_auction => true).count }

Esto funciona bien, y tiene la ventaja de disparar COUNT consultas a MySQL, en lugar de seleccionar realmente los registros.

Sin embargo, ahora necesito incluir registros archivados en los recuentos, pero relation = Model.all da relation = Model.all resultado una Array , y estoy buscando una relación ActiveRecord::Relation .

La única forma en que puedo pensar en hacer esto es model.where(model.arel_table[:id].not_eq(nil)) , que funciona, pero parece un poco absurdo.

¿Alguien puede aclarar esto?


Para Rails 4.1 y superior: Model.all devuelve una relación (donde antes no)

Para Rails 4.0: Model.where(nil)

Para Rails 3.x: Model.scoped


Pruebe relation = Model.scoped . Eso le dará la relación en lugar de los resultados reales.