1

Dans mon tableau subscribers, j'ai des e-mails en double, donc je veux les compter. Je fais cela dans la console Rails:Rails 5: impossible de commander après le groupe et compte

Subscriber.select("email, count(*)").group(:email).order("count (*) desc")

Il en résulte la requête suivante à mon PostgreSQL db:

SELECT email, count(*) FROM "subscribers" GROUP BY "subscribers"."email" ORDER BY count (*) desc

La chose étrange est, bien que cette requête fonctionne très bien quand Exécuter directement à partir de la base de données, il ne fonctionne pas dans la console Rails, qui renvoie:

#<ActiveRecord::Relation [#<Subscriber id: nil, email: "[email protected]">, #<Subscriber id: nil, email: "[email protected]">, #<Subscriber id: nil, email: "[email protected]">]>

Des idées pourquoi?

Répondre

1

Cela fonctionne mais vos objets d'abonné n'ont pas ce champ agrégé (et vous n'extrayez pas les autres). Donnez-lui un nom

subscribers = Subscriber.select("email, COUNT(*) AS counter").group(:email).order("COUNT (*) desc") 

Extrait ces champs

subscribers.each { |s| puts s.email, s.counter } 
+0

Great! L'avez-vous nommé 'counter' au lieu de' count' pour éviter les méthodes réservées? Juste curieux. – bplmp

+0

Je n'ai pas pensé à ça mais c'est sans doute une bonne idée d'éviter de compter :) – Ursus