我有模型lesson
。并关联模型user
。我想按用户数量添加对课程的排序。我想做这样的事情:
lesson.rb
scope :popular, -> { order("users ASC") }
但是它不起作用。
在您的lesson
模型中执行此操作
scope :popular, -> { left_joins(:users).group(:id).order('COUNT(users.id) ASC') }
我在这里假设lessons have_many users
和users belongs_to lesson
我将从这样的东西开始:
scope :popular, -> {
left_outer_joins(:users).group('lessons.id').order('COUNT(users.id) DESC')
}
说明:
left_outer_joins
而不只是join
,也包括没有任何用户的课程group
即使分配了多个用户,也只返回一次课程count
计算每课的用户数(仅与group
结合使用DESC
首先返回热门课程(计数较高)