ruby 2.5.7 Rails 5.2.4.3 OS: macOS Catalina
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
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'
[Einfache Rangfolge mit Rails] (https://qiita.com/mitsumitsu1128/items/18fa5e49a27e727f00b4) [Rails] Implementierung der Ranking-Funktion
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