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!