Ich habe schon einmal einen Artikel wie diesen geschrieben. [Rails] Rangfolge nach Anzahl der Likes
Zusätzlich zu diesem Inhalt habe ich Pagenation implementiert, daher werde ich es als Memo hinterlassen. Dieses Mal möchten wir eine Paginierung implementieren, bei der 5 Beiträge in der Reihenfolge der Likes auf einer Seite sortiert angezeigt werden.
posts
・ users
・ lik
Es wird davon ausgegangen, dass jede Tabelle erstellt wurde.
--Pagenation implementiert mit einem Edelstein namens "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
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
Hier wird die Reihenfolge mit einer Ruby-Methode namens "sort" manipuliert. => Sortierung siehe hier
"a.liked_users.size" und "b.liked_users.size" geben die Anzahl der Likes für jeden Beitrag an. Das heißt, die Anzahl der Likes jedes Posts wird verglichen und in aufsteigender Reihenfolge sortiert.
Da die von der Methode "sort" erzeugte Variable "posts" Array-Daten sind, wird die Methode "paginate_array" verwendet.
Alles was Sie tun müssen, ist es in der Ansicht anzuzeigen.
app/view/posts/index.html
<% @posts.each do |post| %>
#Kürzung
<% end %>
<%= paginate @posts %>
Es gibt viele Methoden, die ich noch nicht kenne.
Recommended Posts