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.
posts ・ users ・ likes On suppose que chaque table a été créée.
--Pagénation implémentée à l'aide d'une gemme appelée Kaminaripost.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
Kaminari à Gemfile et installer le paquetGemfile
gem 'kaminari', '~> 0.17.0'
$ bundle install
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.
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.
Recommended Posts