[RUBY] Organiser les publications par ordre de likes sur Rails (classement)

Aperçu

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.

supposition

Modèle de question (message) Comme modèle

la mise en oeuvre

@questions= Question.left_outer_joins(:likes).group('questions.id').select('questions.*, COUNT(likes.*) AS likes_count').distinct.reorder(likes_count: :desc).limit(100)

Commentaire ...?

  1. 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.

  2. Regroupez les tableaux joints en 1 par questions.id Les questions qui sont appréciées sont regroupées

  3. Spécifiez les données à renvoyer par l'instruction select (toutes les tables de questions et likes_count)

  4. Supprimez les données en double avec distinct.

  5. 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

  6. Utilisez la méthode de limite (si vous le souhaitez) pour limiter le nombre d'acquisitions de données à 100.

finalement

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