我要在其中显示内容的视图
例如:
recipe.user.name
recipe.name
recipe.picture
recipe.created_at
排序
recipe.likes.count
控制器:
@recipes_by_likes = Recipe.likes_count.paginate(page: params[:page])
模型:
Recipe has_many :likes
和
Like belongs_to :recipe
范围:
scope :likes_count, -> {
select('recipes.*, COUNT(likes.id) AS likes_count').
joins(:likes).
order('likes_count DESC')
}
但这给了我
SELECT recipes.*, COUNT(likes.id) AS likes_count
FROM "recipes"
INNER JOIN "likes" ON "likes"."recipe_id" = "recipes"."id"
ORDER BY "recipes"."created_at" DESC, likes_count DESC
LIMIT 30 OFFSET 0
仅返回1(错误)结果。
您不应该按他们的喜欢来计数,id
因为它总是唯一的,并且总是返回1,而不是按recipe_id
与某个食谱相关的喜欢中的相同。
scope :likes_count, -> {
select('recipes.*, COUNT(likes.recipe_id) AS likes_count')
.joins(:likes)
.group('recipes.id')
.order('likes_count DESC')
}
您也可以使用 counter_cache
class Like < ActiveRecord::Base
belongs_to :recipe, counter_cache: true
end
并添加一个Recipe
模型列
add_column :recipes, :likes_count, :integer, default: 0
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句