Lorsque j'ai recherché le classement des likes des rails sur le net, j'ai trouvé un article qui classe les publications avec un ou plusieurs likes par jointure interne en utilisant join, mais je n'ai pas trouvé de classement d'article incluant ceux avec 0 likes J'ai fait de mon mieux pour le mettre en œuvre, alors je vais le griffonner pour approfondir ma compréhension.
Modèle de question (message) Comme modèle
@questions= Question.left_outer_joins(:likes).group('questions.id').select('questions.*, COUNT(likes.*) AS likes_count').distinct.reorder(likes_count: :desc).limit(100)
Outer joint la table des likes au modèle Question avec left_outer_joins (: likes) Utilisez des jointures externes, car les questions qui ne sont pas appréciées en tant que jointures internes à l'aide de la méthode des jointures sont exclues.
Regroupez les tableaux joints en 1 par questions.id Les questions qui sont appréciées sont regroupées
Spécifiez les données à renvoyer par l'instruction select (toutes les tables de questions et likes_count)
Supprimez les données en double avec distinct.
Important ici! Trier par ordre décroissant de likes_count avec la méthode de réorganisation S'il s'agit de la méthode de commande, l'ordre par défaut du tableau Questions (nouvel ordre d'enregistrement) sera appliqué. Réécrire la commande avec la méthode de réapprovisionnement
Utilisez la méthode de limite (si vous le souhaitez) pour limiter le nombre d'acquisitions de données à 100.
Honnêtement, cela peut être faux ou inefficace parce que c'est une mise en œuvre qui a beaucoup de compréhension vague et qui a réussi à gérer. .. Je vous serais reconnaissant si vous pouviez me le dire implicitement. ..
Le guide Rails est très facile à comprendre sur l'interface de requête ActiveRecord ici. Par tous les moyens pour référence
Recommended Posts