[RUBY] Implementierung der Rails-Sortierfunktion (angezeigt in der Reihenfolge der Anzahl der Gleichen)

Voraussetzungen

・ Anwendungen mit Schienen ・ Das Rezeptmodell ist has_many und mit dem Like-Modell verknüpft.

recipe.rb


has_many :passive_likes, class_name: "Like",
                 foreign_key: "liked_id",
                 dependent: :destroy

like.rb


class Like < ApplicationRecord
  belongs_to :liker, class_name: "User"
  belongs_to :liked, class_name: "Recipe"
  validates :liker_id, presence: true
  validates :liked_id, presence: true
end

Was willst du tun

・ Wird in absteigender Reihenfolge entsprechend der Anzahl der liked_ids (Anzahl) des dem Rezeptmodell zugeordneten Like-Modells angezeigt. Ich möchte es so sortieren, dass es gemacht wird.

1. Übergeben Sie die Option an den Pfad der Indexvorlage des Rezepts.

app/views/recipes/index.html.erb


      <p><%= link_to "Recent",   recipes_path(option: "recent") %></p>
      <p><%= link_to "Popular",   recipes_path(option: "popular")%></p>

→ Klicken Sie auf "Zuletzt verwendet" => "Zuletzt verwendet" wird optional übergeben. Klicken Sie auf "Beliebt" => "Schüler" wird optional übergeben.

2. Bedingte Verzweigung von Controllern gemäß den übergebenen Optionen

app/controllers/recipes_controller.rb


def index
    if params[:option] == "recent" || params[:option] == nil
      @page_title = "Recent Recipes"
      @recipes = Recipe.all.order(created_at: :desc).paginate(page: params[:page])
    elsif params[:option] == "popular"
      @page_title = "Popular Recipes"
#Rezept und Like-Tabelle (hat_many :passive_Likes) sind verschmolzen. → Wie Tabelle wie_id(==Recipe.id)Gruppe mit. (Auch wenn es mehrere gibt, kombinieren Sie sie zu einem.) → Sortieren Sie in absteigender Reihenfolge nach dieser Nummer. → Unter ihnen steht der Neue an erster Stelle. →{recipe.id: liked_Anzahl der IDs}Hash ist zurück. (Gefallen_Anzahl der IDs量を基準にした降順 + その中でも新しいものが先に。)
      recipes_hash = Recipe.joins(:passive_likes).group("liked_id").order('count_all DESC').order(created_at: :desc).count 
#recipe.Erstellen Sie nur ein Array von Hash-Schlüsseln.
      recipe_ids = recipes_hash.keys 
#recipe_Gibt das Rezept als Array in der Reihenfolge der IDs zurück.
      recipe_array = Recipe.find(recipe_ids).sort_by{ |recipe| recipe_ids.index(recipe.id)} 
#Rezept mit Kaminari Gem_array(liked_Absteigende Reihenfolge der ID-Nummer und erstellt_in absteigender Reihenfolge von at)In der Reihenfolge von`@recipes`Ersetzen Sie das Rezeptarray durch.
      @recipes = Kaminari.paginate_array(recipe_array).page(params[:page]).per(20) 
    end
  end

3. Installieren Sie Kaminari Gem, damit Kaminari verwendet werden kann.

→ Array aktiviert die Paginierung.

4. Löschen Sie das in Recipe.rb beschriebene default_scope-> {order (created_at :: desc)}.

5. Fügen Sie nach Bedarf auf jedem Controller "order (created_at :: desc)" zu "@ prescription" hinzu.

Recommended Posts

Implementierung der Rails-Sortierfunktion (angezeigt in der Reihenfolge der Anzahl der Gleichen)
[Rails] Implementierung einer ähnlichen Funktion
[Rails] Asynchrone Implementierung der Like-Funktion
[Rails] Über die Implementierung der Like-Funktion
Implementierung einer ähnlichen Funktion in Java
[Ruby on Rails] Implementierung einer ähnlichen Funktion
Implementierung einer ähnlichen Funktion (Ajax)
[Rails] Implementierung der Kategoriefunktion
[Rails] Implementierung der Tutorial-Funktion
[Rails] Implementierung der CSV-Importfunktion
[Rails] Implementierung der Bildvorschau
[Rails] Implementierung der Benutzerrückzugsfunktion
[Rails] Implementierung der CSV-Exportfunktion
[Rails] Implementierung einer neuen Registrierungsfunktion im Assistentenformat mit devise
Ich habe versucht, die Ajax-Verarbeitung der ähnlichen Funktion in Rails zu implementieren
Rails [Für Anfänger] Implementierung der Kommentarfunktion
[Rails] Implementierung der Suchfunktion mit Gem's Ransack
[Bestellmethode] Legen Sie die Reihenfolge der Daten in Rails fest
[Rails] Implementierung der Bildvergrößerungsfunktion mit Lightbox2
[Rails] Implementierung von "Benachrichtigung auf irgendeine Weise benachrichtigen"
[Rails] Implementierung des PV-Nummernrankings mit Impressionist
[Rails] Rangfolge und Paginierung in der Reihenfolge der Likes
Implementierung der Suchfunktion
Implementierung der Pagenationsfunktion
[Rails] Implementierung der Drag & Drop-Funktion (mit Wirkung)
Implementierung der Ruby on Rails-Anmeldefunktion (Devise Edition)
[Rails] Implementierung einer mehrschichtigen Kategoriefunktion unter Verwendung der Abstammung "Vorbereitung"
[Rails] Implementierung einer mehrschichtigen Kategoriefunktion unter Verwendung der "Seed Edition" der Vorfahren
Ordne die Beiträge in der Reihenfolge ihrer Likes auf Rails an (Rangfolge)
Implementieren Sie die Anwendungsfunktion in Rails
Informationen zur Implementierung der Zusammenführungsverarbeitung einschließlich der Sortierfunktion der Stream-API
Implementierung der Ajax-Entfernung in Rails
[Rails] Implementierung einer mehrschichtigen Kategoriefunktion unter Verwendung der Abstammung "Edit Form Edition"
Implementierung der Fuzzy-Suchfunktion für Schienen
Implementierung der sequentiellen Suchfunktion
Implementierung der Bildvorschau
Implementierung der Kategorie-Pulldown-Funktion
Java-Implementierung von Tri-Tree
Implementierung von HashMap mit Kotlin
Lassen Sie uns eine TODO-App in Java 4 erstellen. Implementierung der Buchungsfunktion
Lassen Sie uns eine TODO-App in Java 6 erstellen. Implementierung der Suchfunktion
[Implementierungsverfahren] Erstellen Sie eine Benutzerauthentifizierungsfunktion mithilfe von Hexerei in Rails
Lassen Sie uns eine TODO-App in Java 8 erstellen. Implementierung von Bearbeitungsfunktionen
[Rails] [jQuery] Asynchrone Funktionsimplementierung mit remote: true und js.erb