Maison > base de données > tutoriel mysql > le corps du texte

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

DDD
Libérer: 2024-11-28 04:54:11
original
818 Les gens l'ont consulté

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
Copier après la connexion

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal