・ 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
・ 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.
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.
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
→ Array permet la pagination.
default_scope-> {order (created_at :: desc)} décrit dans Recipe.rb.à @ recettes` sur chaque contrôleur si nécessaire.Recommended Posts