Cette requête
Message.where("message_type = ?", "incoming").group("sender_number").count
me rendra un hachage.
OrderedHash {"1234"=>21, "2345"=>11, "3456"=>63, "4568"=>100}
Maintenant, je veux commander par nombre de chaque groupe. Comment puis-je faire cela dans la requête.
La façon la plus simple de procéder consiste à simplement ajouter une clause order à la requête d'origine. Si vous donnez à la méthode count un champ spécifique, elle générera une colonne de sortie avec le nom count_ {colonne}, qui peut être utilisée dans le sql généré en ajoutant un appel de commande:
Message.where('message_type = ?','incoming')
.group('sender_number')
.order('count_id asc').count('id')
Quand j'ai essayé cela, Rails m'a donné cette erreur
SQLite3::SQLException: no such column: count_id: SELECT COUNT(*) AS count_all, state AS state FROM "ideas" GROUP BY state ORDER BY count_id desc LIMIT 3
Notez qu'il dit SELECT ... AS count_all
J'ai donc mis à jour la requête de la réponse de @ Simon pour ressembler à ceci et cela fonctionne pour moi
.order('count_all desc')