--Classement des messages des utilisateurs
ruby 2.5.7 Rails 5.2.4.3 OS: macOS Catalina
Ajouté pour donner une note dans les commentaires de l'article.
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
Si rien n'est fait, il y aura une différence de points, donc Décrit afin que le score puisse être sélectionné dans la vue.
erb:app/views/posts/show.html.erb
Évaluation:<%= f.number_field :score,min:1,max:5 %>
Lorsque vous donnez la valeur totale
<% @sum = 0 %>
<% @post.comments.each do |comment| %>
<% @sum += comment.score %>
<% end %>
<%= @sum %>
Lors du calcul de la valeur moyenne
<% @average = 0 %>
<% @post.comments.each do |comment| %>
<% @average += (comment.score / @user.comments.count) %>
<% end %>
<%= @average %>
Maintenant que nous sommes prêts, passons au sujet principal.
controller Le contrôleur est la clé.
Classement de la valeur totale: application/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
Classement moyen: application/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
<détails>
view Peut être affiché dans l'ordre décroissant de chacun comme indiqué ci-dessous Après avoir créé 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'
[Fonction de classement facile avec Rails] (https://qiita.com/mitsumitsu1128/items/18fa5e49a27e727f00b4) [Rails] Implémentation de la fonction de classement
Cette fois, je voulais montrer aux utilisateurs qui ont publié des scores élevés, alors Bien que ce soit devenu une telle description, Ce n'est peut-être pas très pratique. Cependant, si vous utilisez ces classements, Uniquement pour ceux qui apprécient le score ou uniquement pour ceux qui ont un score faible Je pense que c'est un classement favorable aux ventes car vous pouvez adopter une approche.
De plus, si vous souhaitez mettre en œuvre un classement de bouche à oreille, etc. pour le classement par score des publications, Je pense que ce sera une description pratique.
Recommended Posts