7
votes

Utilisation de groupe_by dans Rails / Ruby

Voici mon tableau: xxx

J'aimerais utiliser group_by (je pense?) Pour regrouper les votes par user_id (que chaque vote a), puis renvoyez le user_id avec les votes les plus élevés.

Des idées Comment je peux faire cela?


0 commentaires

3 Réponses :


9
votes

Avez-vous essayé la méthode ? xxx

vous donnera un hachage où les touches sont le user_id < / code> et les valeurs sont le nombre . Vous pouvez ensuite appeler max sur ce résultat pour obtenir un tableau à deux éléments contenant le user_id et le nombre comptent .

Voici un exemple d'une application que j'ai pratique, où j'utilise le résultat du calcul pour trouver l'instance de modèle correcte et lire des propriétés à partir de celui-ci: xxx


0 commentaires

0
votes

Si votre structure de table est comme: xxx

ceci doit renvoyer un tableau dans lequel le premier élément est l'user_id avec le plus de votes, le deuxième élément est le nombre de cet user_id. xxx


1 commentaires

Si vous n'avez pas besoin des autres entrées du vote (ne les utiliserez pas), il s'agit d'une manière très inefficace de le faire. Le meilleur moyen serait de saisir la ligne unique de la base de données contenant le bon utilisateur_id et leur compte (voir ma réponse).



1
votes

Je pense que ce que vous voulez vraiment, c'est ceci:

Vote.select("votes.user_id, count(votes.id)").
  where(:month => month, :year => year, :id => vote.id).
  group("votes.user_id").
  order("count(votes.id) DESC").
  limit(1)


0 commentaires