[RUBY] Ordne die Beiträge in der Reihenfolge ihrer Likes auf Rails an (Rangfolge)

Überblick

Als ich im Internet nach dem Likes-Ranking von Rails gesucht habe, habe ich einen Artikel gefunden, in dem Posts mit einem oder mehreren Likes nach internem Join mithilfe von Join eingestuft werden. Ich konnte jedoch kein Artikel-Ranking finden, das auch solche mit 0 Likes enthält. Ich habe mein Bestes versucht, um es umzusetzen, also werde ich es kritzeln, um mein Verständnis zu vertiefen.

Annahme

Fragenmodell (Beitrag) Wie Modell

Implementierung

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

Kommentar ...?

  1. Verbinden Sie die Likes-Tabelle mit dem Fragenmodell mit left_outer_joins (: Likes). Verwenden Sie äußere Verknüpfungen, da Fragen, die mit der Verknüpfungsmethode nicht als innere Verknüpfungen eingestuft werden, ausgeschlossen sind.

  2. Gruppieren Sie die in 1 zusammengefügten Tabellen nach Fragen.id Fragen, die gefallen, werden zusammengefasst

  3. Geben Sie die Daten an, die von der select-Anweisung zurückgegeben werden sollen (Tabelle mit allen Fragen und lik_count).

  4. Entfernen Sie doppelte Daten mit eindeutigen.

  5. Wichtig hier! Sortieren Sie mit der Neuordnungsmethode in absteigender Reihenfolge von lik_count Wenn es sich um die Bestellmethode handelt, wird die Standardreihenfolge der Fragentabelle (neue Registrierungsreihenfolge) angewendet. Schreiben Sie die Bestellung mit der Nachbestellungsmethode neu

  6. Verwenden Sie die Limit-Methode (wenn Sie möchten), um die Anzahl der Datenerfassungen auf 100 zu begrenzen.

Schließlich

Ehrlich gesagt ist es eine Implementierung, die viel vages Verständnis hat und es geschafft hat, sie zu verwalten, so dass sie falsch oder ineffizient sein kann. .. Ich würde es begrüßen, wenn Sie es mir implizit sagen könnten. ..

Das Rails-Handbuch ist sehr einfach über die ActiveRecord-Abfrageoberfläche hier zu verstehen. Auf jeden Fall als Referenz

Recommended Posts