Rails按受欢迎程度排序

时间:2020-09-23 17:00:28

标签: ruby-on-rails

我正在尝试通过外部人气指数显示商品,该分数是通过查看商品的“喜欢”数量而得出的。

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来包含项目,而不是数组中的项目+分数。有没有一种更有效的方式来按热门排序,然后只退还商品?

1 个答案:

答案 0 :(得分:0)

我最终将其转换为查询:

@items = @importitems.left_joins(:liked_items)
                          .group(:id)
                          .order('COUNT(liked_items.id) DESC')
                          .limit(10)