[RUBY] Mise en place de la fonction de tri des rails (affichés par ordre de nombre de like)

Conditions préalables

・ Applications utilisant des rails ・ Le modèle de recette est has_many et est lié au modèle Like.

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

Que veux-tu faire

・ Affiché par ordre décroissant en fonction du nombre de liked_ids (count) du modèle Like associé au modèle Recipe. Je veux le trier pour qu'il soit fait.

1. Passez l'option au chemin du modèle d'index de la recette.

app/views/recipes/index.html.erb


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

→ Cliquez sur "Récent" => "Récent" est passé en option. Cliquez sur "Popular" => "pupular" est passé en option.

2. Branchement conditionnel des contrôleurs selon les options validées

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"
#Recette et table similaire (a_many :passive_aime) sont fusionnés. → Comme table comme_id(==Recipe.id)Groupe avec. (Même s'il y en a plusieurs, combinez-les en un seul.) → Triez par ordre décroissant en fonction de ce nombre. → Parmi eux, le nouveau vient en premier. →{recipe.id: liked_Nombre d'identifiants}Hash est de retour. (Aimé_Nombre d'identifiants量を基準にした降順 + その中でも新しいものが先に。)
      recipes_hash = Recipe.joins(:passive_likes).group("liked_id").order('count_all DESC').order(created_at: :desc).count 
#recipe.Créez un tableau de clés de hachage uniquement.
      recipe_ids = recipes_hash.keys 
#recipe_Renvoie Recipe sous forme de tableau dans l'ordre des identifiants.
      recipe_array = Recipe.find(recipe_ids).sort_by{ |recipe| recipe_ids.index(recipe.id)} 
#Recette utilisant Kaminari Gem_array(liked_Ordre décroissant du numéro d'identification et créé_par ordre décroissant de at)Dans l'ordre de`@recipes`Remplacez le tableau de recettes par.
      @recipes = Kaminari.paginate_array(recipe_array).page(params[:page]).per(20) 
    end
  end

3. Installez Kaminari Gem afin que Kaminari puisse être utilisé.

→ Array permet la pagination.

4. Supprimez le default_scope-> {order (created_at :: desc)} décrit dans Recipe.rb.

5. Ajoutez ʻorder (created_at :: desc) à @ recettes` sur chaque contrôleur si nécessaire.

Recommended Posts

Mise en place de la fonction de tri des rails (affichés par ordre de nombre de like)
[Rails] Implémentation d'une fonction similaire
[Rails] Implémentation asynchrone de la fonction similaire
[Rails] À propos de la mise en œuvre de la fonction similaire
Implémentation d'une fonction similaire en Java
[Ruby on rails] Implémentation d'une fonction similaire
Implémentation d'une fonction similaire (Ajax)
[Rails] Implémentation de la fonction de catégorie
[Rails] Implémentation de la fonction tutoriel
[Rails] Implémentation de la fonction d'importation CSV
[Rails] Implémentation de la fonction de prévisualisation d'image
[Rails] Implémentation de la fonction de retrait utilisateur
[Rails] Implémentation de la fonction d'exportation CSV
[Rails] Implémentation d'une nouvelle fonction d'enregistrement au format assistant à l'aide de devise
J'ai essayé d'implémenter le traitement Ajax de la fonction similaire dans Rails
Rails [Pour les débutants] Implémentation de la fonction de commentaire
[Rails] Implémentation de la fonction de recherche en utilisant le ransack de gem
[Order method] Définit l'ordre des données dans Rails
[Rails] Implémentation de la fonction d'agrandissement d'image à l'aide de lightbox2
[Rails] Mise en œuvre de "notifier la notification d'une manière ou d'une autre"
[Rails] Mise en œuvre du classement des nombres PV à l'aide de l'impressionniste
[Rails] Classement et pagination par J'aime
Implémentation de la fonction de recherche
Mise en œuvre de la fonction de pagénation
[Rails] Implémentation de la fonction glisser-déposer (avec effet)
Implémentation de la fonction de connexion Ruby on Rails (édition de devise)
[Rails] Implémentation de la fonction de catégorie multicouche en utilisant l'ascendance "Préparation"
[Rails] Implémentation de la fonction de catégorie multicouche à l'aide de l'ascendance "seed edition"
Organiser les publications par ordre de likes sur Rails (classement)
Implémenter la fonction d'application dans Rails
À propos de l'implémentation du traitement de fusion, y compris la fonction de tri de l'API Stream
Implémentation de la suppression d'ajax dans Rails
[Rails] Implémentation de la fonction de catégorie multicouche en utilisant l'ascendance "Edit Form Edition"
Implémentation de la fonction de recherche floue Rails
Implémentation de la fonction de recherche séquentielle
Implémentation de la fonction de prévisualisation d'image
Mise en œuvre de la fonction déroulante de catégorie
Implémentation Java de tri-tree
Implémentation de HashMap avec kotlin
Créons une application TODO en Java 4 Implémentation de la fonction de publication
Créons une application TODO en Java 6 Implémentation de la fonction de recherche
[Procédure d'implémentation] Créer une fonction d'authentification utilisateur à l'aide de sorcellerie dans Rails
Créons une application TODO en Java 8 Implémentation des fonctions d'édition
[Rails] [jQuery] Implémentation de fonction asynchrone avec remote: true et js.erb