[Ruby on Rails] Post-Score-Ranking-Funktion (gesamte Anzeige)

Ziel

Entwicklungsumgebung

ruby 2.5.7 Rails 5.2.4.3 OS: macOS Catalina

Annahme

Spalte hinzufügen

Hinzugefügt, um eine Bewertung in den Kommentaren zum Beitrag zu geben.

Terminal


$ rails g migration AddScoreToComments score:integer

db/migrate/xxxxxxxxxxxxx_add_score_to_comments.rb


class AddScoreToComments < ActiveRecord::Migration[5.2]
  def change
    add_column :comments, :score, :integer, default: 0
  end
end

Wenn nichts unternommen wird, gibt es einen Unterschied in den Punkten Beschrieben, damit die Partitur in der Ansicht ausgewählt werden kann.

erb:app/views/posts/show.html.erb


Bewertung:<%= f.number_field :score,min:1,max:5 %>

Bei Angabe des Gesamtwertes


<% @sum = 0 %>
<% @post.comments.each do |comment| %>
  <% @sum += comment.score %>
<% end %>
<%= @sum %>

Bei der Berechnung des Durchschnittswertes


<% @average = 0 %>
<% @post.comments.each do |comment| %>
  <% @average += (comment.score / @user.comments.count) %>
<% end %>
<%= @average %>

Nachdem wir fertig sind, gehen wir zum Hauptthema über.

controller Der Controller ist der Schlüssel.

Gesamtwert-Ranking: App/controllers/users_controller.rb


  def rank
    @users = User.
              left_joins(:comments).
              distinct.
              sort_by do |user|
                hoges = user.comments
                if hoges.present?
                  hoges.map(&:score).sum
                else
                  0
                end
              end.
              reverse
  end

Durchschnittliches Ranking: App/controllers/users_controller.rb


  def rank
    @users = User.
              left_joins(:comments).
              distinct.
              sort_by do |user|
                hoges = user.comments
                if hoges.present?
                  hoges.map(&:score).sum / hoges.size
                else
                  0
                end
              end.
              reverse
  end
Supplement -Left_joins (: Kommentare): Holen Sie sich alle Benutzer, die mit Kommentaren verknüpft sind, indem Sie linke äußere Verknüpfungen sagen. Wenn es keinen Kommentar gibt, ist es eine Methode, um null zu erhalten. Diese Erklärung ist leicht zu verstehen. [[Rails] Was ist der linke äußere Join, der durch die left_joins-Methode definiert wird? ](Https://pikawaka.com/rails/left_joins) -Distinct: Eine Methode zum Kombinieren doppelter Datensätze zu einem. In diesem Fall erhält der Benutzer bei zwei oder mehr Kommentaren auch zwei oder mehr Wird verwendet, um Doppelarbeit zu vermeiden. ・ Sortieren_by do |user|: Eine Methode zum Sortieren des Arrays in aufsteigender Reihenfolge. Ersetzen Sie ihn als Wert unter den Bedingungen nach if. -Map (&: score): Eine Methode, die nur den Score-Wert hinzufügt. Diese Erklärung ist leicht zu verstehen. [Bedeutung von arr.map (&: id), die häufig in Rails verwendet wird](https://qiita.com/s_tatsuki/items/869af9c0c33d9d650f3f) -Reverse: Sort_by wird zum Sortieren in aufsteigender Reihenfolge verwendet, daher wird es umgekehrt. Bitte beachten Sie jedoch, dass die Bestellung bei gleichen Nummern die neueste ist. Ich werde es erneut aktualisieren, wenn ich es lösen kann. -Hoges.size: Die Anzahl der Schweine wird erfasst. Der Durchschnitt wird basierend auf dieser Zahl berechnet.

view Kann wie unten gezeigt in absteigender Reihenfolge angezeigt werden Nach dem Erstellen von app / views / users / rank.html.erb

erb:app/views/users/rank.html.erb


<% @users.each do |user| %>
  <%= link_to user_path(user) do %>
    <%= user.name %><br>
  <% end %>
<% end %>

routing

config/routes.rb


get '/rank', to: 'users#rank'

Referenzseite

[Einfache Rangfolge mit Rails] (https://qiita.com/mitsumitsu1128/items/18fa5e49a27e727f00b4) [Rails] Implementierung der Ranking-Funktion

Zusammenfassung

Dieses Mal wollte ich den Benutzern zeigen, die Highscores gepostet haben Obwohl es eine solche Beschreibung wurde, Es kann nicht sehr praktisch sein. Wenn Sie jedoch diese Ranglisten verwenden, Nur für diejenigen, die die Punktzahl schätzen oder nur für diejenigen, die eine niedrige Punktzahl haben Ich denke, es ist ein verkaufsfreundliches Ranking, weil Sie einen Ansatz wählen können.

Wenn Sie ein Mund-zu-Mund-Ranking usw. für das Score-Ranking von Posts implementieren möchten, Ich denke, es wird eine praktische Beschreibung sein.

Recommended Posts

[Ruby on Rails] Post-Score-Ranking-Funktion (gesamte Anzeige)
[Ruby on Rails] Ranglistenanzeige (Gesamt, Durchschnittswert)
[Ruby on Rails] Asynchrone Kommunikation der Posting-Funktion, Ajax
[Ruby on Rails] Paging-Funktion eingeführt
[Ruby on Rails] CSV-Ausgabefunktion
[Ruby on Rails] Implementierung der Kommentarfunktion
[Ruby on Rails] DM, Chat-Funktion
[Ruby on Rails] Folgen Sie der Funktionsimplementierung: Bidirektional
[Ruby on Rails] Posting-Funktion, die nur angemeldete Benutzer posten können
[Ruby on Rails] Implementierung einer ähnlichen Funktion
[Ruby on Rails] Logisches Löschen (Auszahlungsfunktion)
Validierungseinstellungen für die Ruby on Rails-Anmeldefunktion
Implementierung der Ruby on Rails-Anmeldefunktion (Sitzung)
Ruby on Rails Implementierung der automatischen Mail-Sendefunktion
[Ruby on Rails] Nachbearbeitungsfunktion (Aktualisieren, Löschen)
[Ruby on Rails] Individuelle Anzeige von Fehlermeldungen
[Rails] Tag-Ranking-Funktion
Ruby on Rails Elementary
Ruby on Rails Grundlagen
Ruby On Rails Association
Implementierung der Ruby on Rails-Anmeldefunktion (Devise Edition)
[Ruby on Rails] Post-Bildvorschau-Funktion in Refile
[Ruby on Rails] Suchfunktion (Modell, Methodenauswahlformel)
Ruby on Rails Lernrekord -2020.10.03
Portfolioerstellung Ruby on Rails
Ruby on Rails Lernrekord -2020.10.04
Ruby on Rails Lernrekord -2020.10.09
Ruby on Rails lernen Rekord-2020.10.07 ②
Ruby on Rails lernen Rekord-2020.10.07 ①
Brechen Sie die Ruby on Rails-Migration ab
Ruby on Rails Lernrekord -2020.10.06
[Rails] Implementieren Sie die Image-Posting-Funktion
Zusammenfassung der Ruby on Rails-Validierung
Ruby on Rails Grundlegendes Memorandum
Ruby on Rails Einstellung der automatischen E-Mail-Sendefunktion (über Google Mail)
[Ruby on Rails] Zeigt den Seitentitel schnell im Browser an
(Ruby on Rails6) Anzeige der Datenbank, die die ID der Datenbank erhalten hat
Ein Hinweis zum Seed-Feature von Ruby on Rails
[Ruby on Rails] Implementieren Sie die Anmeldefunktion von add_token_to_users mit API
So zeigen Sie Diagramme in Ruby on Rails an (LazyHighChart)
Ruby on Rails-Variablen, konstante Zusammenfassung
Installation von Ruby + Rails unter Ubuntu 18.04 (rbenv)
Ich möchte eine Browsing-Funktion mit Ruby on Rails hinzufügen
Grundkenntnisse in Ruby on Rails
Verwendung von Ruby on Rails
Ruby on Rails Japanisch-Englisch kompatibler i18n
(Ruby on Rails6) Gepostete Inhalte "löschen"