・ 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
・ 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.
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.
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
→ Array aktiviert die Paginierung.
default_scope-> {order (created_at :: desc)}
.Recommended Posts