[RUBY] [Rails] Classement et pagination par J'aime

J'ai déjà écrit un article comme celui-ci. [Rails] Classement par nombre de likes

En plus de ce contenu, j'ai implémenté la page nation, je vais donc le laisser comme mémo. Cette fois, nous visons à mettre en œuvre la pagination qui affiche 5 articles triés par ordre de likes sur une page.

supposition

procédure

Définir des associations dans le modèle

post.rb


class Post < ApplicationRecord
    belongs_to :user
    has_many :likes, dependent: :destroy
    has_many :liked_users, through: :likes, source: :user
end

user.rb


class User < ApplicationRecord
  has_many :posts,dependent: :destroy
  has_many :likes, dependent: :destroy
  has_many :liked_posts, through: :likes, source: :post
end

like.rb


class Like < ApplicationRecord
  belongs_to :post
  belongs_to :user
end

Ajouter Kaminari à Gemfile et installer le paquet

Gemfile


gem 'kaminari', '~> 0.17.0'
$ bundle install

Jouez avec le contrôleur

app/controller/posts_controller.rb


def index
  posts = Post.includes(:liked_users).sort {|a,b| b.liked_users.size <=> a.liked_users.size}
  @posts = Kaminari.paginate_array(posts).page(params[:page]).per(5)
end

Ici, l'ordre est manipulé à l'aide d'une méthode ruby appelée sort. => Voir ici pour le tri

«a.liked_users.size» et «b.liked_users.size» représentent le nombre de likes pour chaque message. Autrement dit, le nombre de likes de chaque message est comparé et trié par ordre croissant.

Puisque la variable posts générée par la méthode sort est des données de tableau, la méthode paginate_array est utilisée.

Afficher dans la vue

Tout ce que vous avez à faire est de l'afficher dans la vue.

app/view/posts/index.html


<% @posts.each do |post| %>

  #réduction

<% end %>
<%= paginate @posts %>

Il existe de nombreuses méthodes que je ne connais pas encore.

référence

Recommended Posts

[Rails] Classement et pagination par J'aime
Organiser les publications par ordre de likes sur Rails (classement)
[Order method] Définit l'ordre des données dans Rails
Résumé des commandes fréquemment utilisées dans Rails et Docker
Mise en place de la fonction de tri des rails (affichés par ordre de nombre de like)
Activer jQuery et Bootstrap dans Rails 6 (Rails 6)
Explication de l'ordre des itinéraires ferroviaires
Supprimez les "actifs" et les "turbolinks" dans "Rails6".
[Rails] Différences et utilisation de each_with_index et each.with_index
Ajout de la première fonction de pagination dans les rails
Trier par nombre de likes et par nation de page
[Java] Obtenez les dates des derniers lundi et dimanche dans l'ordre
[Webpacker] Résumé de l'installation de Bootstrap et jQuery dans Rails 6.0
Comment supprimer de grandes quantités de données dans Rails et problèmes
La validation de printemps était importante dans l'ordre de Form et BindingResult
[Rails] Différence de comportement entre delegate et has_many-through dans le cas de one-to-one-to-many
L'identité des paramètres de rails [: id]
[rails] Liste des actions définies dans Controller
Résumé des hachages et symboles dans Ruby
Comment implémenter la fonctionnalité de classement dans Rails
Discrimination d'énum dans Java 7 et supérieur
[Rails 6] Méthode spécifique d'incorporation de Font Awesome dans link_to [Copier OK]
Recommandation de classe de service dans Ruby on Rails
Ruby on Rails ~ Principes de base de MVC et du routeur ~
[Rails] Mise en œuvre de "notifier la notification d'une manière ou d'une autre"
Ceci et celui de la dérivation conditionnelle du développement des rails
Ordre des modificateurs utilisés dans Swift (voir SwiftLint)
Comment utiliser JQuery dans Rails 6 js.erb
Différence entre le membre et la collection de rails routes.rb
[Rails] Mise en œuvre du classement des nombres PV à l'aide de l'impressionniste
[Rails] ActiveRecord :: HasManyThrough Order Error in Users # show
Vers la compréhension de la carte et de la flatmap dans Stream (1)
[Rails] Afficher les messages populaires au format de classement [Facile]
Rails et données de forme
Group_by dans Rails
Utilisation de polices japonaises et de caractères étrangers dans Jasper Report
Linked HashMap référencé dans l'ordre d'insertion et son exemple d'utilisation
Convivialité de la classe de date et d'heure dans chaque langue
SSL dans l'environnement local de Docker / Rails / puma
Traitement de la date et de l'heure en Ruby. Utilisez correctement la date et l'heure.
Créer une API de tableau d'affichage avec autorisation dans Rails 6 # 12 Association d'utilisateur et de publication