如何创建按用户计数排序?

问题描述 投票:0回答:2

我有模型lesson。并关联模型user。我想按用户数量添加对课程的排序。我想做这样的事情:

lesson.rb

scope :popular, -> { order("users ASC") }

但是它不起作用。

ruby-on-rails ruby rails-activerecord
2个回答
1
投票

在您的lesson模型中执行此操作

scope :popular, -> { left_joins(:users).group(:id).order('COUNT(users.id) ASC') }

我在这里假设lessons have_many usersusers belongs_to lesson


1
投票

我将从这样的东西开始:

scope :popular, -> { 
  left_outer_joins(:users).group('lessons.id').order('COUNT(users.id) DESC')
}

说明:

  • [left_outer_joins而不只是join,也包括没有任何用户的课程
  • [group即使分配了多个用户,也只返回一次课程
  • [count计算每课的用户数(仅与group结合使用
  • 计数中的DESC首先返回热门课程(计数较高)
© www.soinside.com 2019 - 2024. All rights reserved.