・ 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