[RUBY] [Rails] Rangfolge und Paginierung in der Reihenfolge der Likes

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.

Annahme

Verfahren

Definieren Sie Assoziationen im Modell

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

Fügen Sie "Kaminari" zu Gemfile hinzu und "Bundle Install"

Gemfile


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

Spielen Sie mit dem Controller

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.

In Ansicht anzeigen

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.

Referenz

Recommended Posts

[Rails] Rangfolge und Paginierung in der Reihenfolge der Likes
Ordne die Beiträge in der Reihenfolge ihrer Likes auf Rails an (Rangfolge)
[Bestellmethode] Legen Sie die Reihenfolge der Daten in Rails fest
Zusammenfassung der häufig verwendeten Befehle in Rails und Docker
Implementierung der Rails-Sortierfunktion (angezeigt in der Reihenfolge der Anzahl der Gleichen)
Aktivieren Sie jQuery und Bootstrap in Rails 6 (Rails 6).
Erläuterung der Reihenfolge der Schienenrouten
Entfernen Sie "Assets" und "Turbolinks" in "Rails6".
[Rails] Unterschiede und Verwendung von each_with_index und each.with_index
Hinzufügen der ersten Paginierungsfunktion in Schienen
Sortieren Sie nach der Anzahl der Likes und der Seitennation
[Java] Ordnen Sie die Daten des vergangenen Montags und Sonntags der Reihe nach an
[Webpacker] Zusammenfassung der Installation von Bootstrap und jQuery in Rails 6.0
So löschen Sie große Datenmengen in Rails und Bedenken
Die Frühjahrsvalidierung war in der Reihenfolge von Form und BindingResult wichtig
[Rails] Unterschied im Verhalten zwischen Delegat und has_many-through bei Eins-zu-Eins-zu-Viele
Die Identität der Schienenparameter [: id]
[Rails] Liste der in Controller definierten Aktionen
Zusammenfassung der Hashes und Symbole in Ruby
So implementieren Sie Ranking-Funktionen in Rails
Diskriminierung von Enum in Java 7 und höher
Die "Ergebnisse" des Ranking-Top-10-Arguments enthalten die Antwort der API, die von den vorherigen "get_rankings_results" erhalten wurde. Sie können auch mit'results.get ('rows') 'auf jede Ergebniszeile zugreifen. Die Ergebnisse sind in der Reihenfolge "Dimensionen" und "Metriken" angeordnet, sodass Sie den Seitenpfad des ersten Ergebnisses abrufen können, indem Sie "results.get" ("Zeilen") [0] [1] "ausführen. Python, Google Analytics [Rails 6] Spezifische Methode zum Einbetten von Font Awesome in link_to [Copy OK]
Empfehlung der Serviceklasse in Ruby on Rails
Ruby on Rails ~ Grundlagen von MVC und Router ~
[Rails] Implementierung von "Benachrichtigung auf irgendeine Weise benachrichtigen"
Dies und das der bedingten Verzweigung der Schienenentwicklung
Reihenfolge der in Swift verwendeten Modifikatoren (siehe SwiftLint)
Verwendung von JQuery in Rails 6 js.erb
Unterschied zwischen Mitglied und Sammlung von Schienen route.rb
[Rails] Implementierung des PV-Nummernrankings mit Impressionist
[Rails] ActiveRecord :: HasManyThrough-Bestellfehler in Benutzer # show
Zum Verständnis von Karte und Flatmap in Stream (1)
[Rails] Beliebte Beiträge im Ranking-Format anzeigen [Easy]
Schienen und Formulardaten
Group_by in Rails
Verwendung japanischer Schriftarten und Fremdzeichen in Jasper Report
Verknüpfte HashMap, auf die in der Reihenfolge des Einfügens verwiesen wird, und deren Verwendungsbeispiel
Verwendbarkeit von Datums- und Zeitklasse in jeder Sprache
SSL in der lokalen Umgebung von Docker / Rails / Puma
Umgang mit Datum und Uhrzeit in Ruby. Verwenden Sie Datum und Uhrzeit richtig.
Erstellen Sie eine Bulletin-Board-API mit Autorisierung in Rails 6 # 12 Assoziation von Benutzer und Beitrag