Ordre des enregistrements par nombre d'associations dans Rails 3 ActiveRecord
Dans Rails 3, vous pouvez utiliser l'association has_many pour déterminer efficacement les enregistrements les plus populaires basé sur le nombre d’associations. Prenons l'exemple d'un modèle Song avec un modèle Listen associé, où chaque Listen appartient à un Song.
Pour récupérer les 5 chansons les plus écoutées, vous pouvez définir une portée au sein du modèle Song à l'aide de portées nommées :
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) end
Cette portée combine la puissance des portées nommées et des associations. Il calcule le nombre d'écoutes pour chaque chanson, trie les résultats par ordre décroissant en fonction de ce nombre et limite le résultat aux 5 chansons les plus écoutées.
En tirant parti de la portée top5, vous pouvez facilement obtenir le chansons les plus populaires en utilisant une simple requête :
Song.top5 # top 5 most listened songs
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!