我正在尝试通过外部人气指数显示商品,该分数是通过查看商品的“喜欢”数量而得出的。
item.rb
belongs_to :restaurant
has_many :liked_items
has_many :items, through: :liked_items
likeditem.rb
belongs_to :item
controller.rb
@popular = Hash.new(0)
@importitems = @restaurant.items
@importitems.each do |i|
@likecount = i.liked_items.count
@popular[i] += @likecount
end
@items = @popular.sort_by { |key, value| value }.reverse
但是,我只需要@items
来包含项目,而不是数组中的项目+分数。有没有一种更有效的方式来按热门排序,然后只退还商品?
答案 0 :(得分:0)
我最终将其转换为查询:
@items = @importitems.left_joins(:liked_items)
.group(:id)
.order('COUNT(liked_items.id) DESC')
.limit(10)