Maison >base de données >tutoriel mysql >Comment trier les résultats ActiveRecord par nombre d'associations dans Rails 3 ?

Comment trier les résultats ActiveRecord par nombre d'associations dans Rails 3 ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-26 13:18:11798parcourir

How to Order ActiveRecord Results by Association Count in Rails 3?

Ordre des résultats ActiveRecord par nombre d'associations

Dans Rails 3, vous pouvez rencontrer des scénarios dans lesquels vous devez récupérer les données d'un modèle et trier les résultats en fonction du nombre de enregistrements associés dans un autre modèle. Ceci peut être réalisé en utilisant les étendues nommées d'ActiveRecord.

Prenons l'exemple d'un modèle de chanson auquel de nombreux enregistrements d'écoute sont associés. Pour trouver les cinq chansons les plus écoutées, vous pouvez utiliser l'approche de portée nommée :

class Song
  has_many :listens
  scope :top5,
    select("songs.id, OTHER_ATTRS_YOU_NEED, count(listens.id) AS listens_count").
    joins(:listens).
    group("songs.id").
    order("listens_count DESC").
    limit(5)

# Retrieve the top 5 songs based on listen count
Song.top5

Dans cette portée nommée, nous utilisons la méthode select pour inclure les colonnes d'intérêt ainsi qu'un nom personnalisé. colonne listenings_count qui représente le nombre d'écoutes. La méthode joins établit l’association entre les modèles Song et Listen. La méthode de groupe regroupe les résultats par Song.id pour regrouper le nombre d'écoutes de chaque chanson. Enfin, les méthodes d'ordre et de limite trient les résultats par ordre décroissant du nombre d'écoutes et limitent la sortie aux cinq premières chansons.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn