ruby-on-rails - rails - activerecord relation




Rails/Arel: Sélection de tous les enregistrements en tant que ActiveRecord:: Relation (2)

Utiliser Arel dans Rails - Je cherche un moyen de créer une ActiveRecord::Relation qui aboutit à la SELECT * FROM table , que je peux encore manipuler.

Par exemple, j'ai un modèle qui est divisé en plusieurs catégories, et je renvoie les chiffres suivants de la manière suivante:

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
}

Cela fonctionne bien et a l'avantage de déclencher des requêtes COUNT vers MySQL, plutôt que de sélectionner les enregistrements eux-mêmes.

Cependant, je dois maintenant inclure les enregistrements archivés dans les comptes, mais relation = Model.all donne un Array , et je recherche une ActiveRecord::Relation .

La seule façon de penser à cela est model.where(model.arel_table[:id].not_eq(nil)) , qui fonctionne, mais semble légèrement absurde.

Quelqu'un peut-il nous éclairer à ce sujet?


Essayez la relation = Model.scoped . Cela vous donnera la relation au lieu des résultats réels.


Pour Rails 4.1 et ci-dessus: Model.all renvoie une relation (où ce n'est pas le cas auparavant)

Pour Rails 4.0: Model.where(nil)

Pour Rails 3.x: Model.scoped





active-relation