J'ai deux modèles, un User
et un Exercise
où un utilisateur has_many :exercises
. Il y a un cache_counter sur le modèle User
, exercise_count
Nombre de requêtes imbriquées
Je veux faire un classement basé sur le nombre d'exercices d'un utilisateur dans le mois courant. Je veux afficher les 2 utilisateurs avec les comptes d'exercice les plus élevés du mois avec le nombre. S'il y a d'autres utilisateurs avec le même nombre d'exercices que l'utilisateur de deuxième place, je veux les afficher aussi. (affichage 2+ utilisateurs)
La requête en cours, je
# User model
scope :exercises_this_month, -> { includes(:exercises).references(:exercises)
.where("exercise_count > ? AND exercises.exercise_time > ? AND exercises.exercise_time < ?",
0 , Time.now.beginning_of_month, Time.now.end_of_month)
}
def User.leaders
limit = User.exercises_this_month.where("exercise_count > ?", 0).order(exercise_count: :desc).second.exercise_count
User.exercises_this_month.where("exercise_count > ? AND exercise_count >= ?", 0, limit)
end
retournera le haut 2+ objet utilisateur pour tous les temps. Je veux limiter cela au mois courant.
je fini par utiliser l'essence de cette réponse et a créé une portée sur le modèle d'exercice pour limiter par mois, puis créé un tableau d'utilisateurs par ces chiffres et sélectionné les meilleurs utilisateurs à partir de là – Andy