Maison >base de données >tutoriel mysql >Comment trouver les N enregistrements les plus associés dans Rails 3 en utilisant has_many ?

Comment trouver les N enregistrements les plus associés dans Rails 3 en utilisant has_many ?

DDD
DDDoriginal
2024-11-28 04:54:11883parcourir

How to Find the Top N Most Associated Records in Rails 3 using has_many?

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!

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