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 Kaminari
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
Kaminari
à Gemfile et installer le paquet
Gemfile
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