繁体   English   中英

如何按用户数创建排序?

[英]How to create sort by users count?

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

课程.rb

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

但它不起作用。

在你的lesson模型中这样做

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

我在这里假设lessons have_many usersusers belongs_to lesson 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首先返回热门课程(计数较高)

除了使用 SQL 文字进行分组,您还可以使用 arel gem。

scope :popular, -> {
  left_joins(:users).group(:id).order(User.arel_table[:id].count.desc)
}

spickermann回答已经给出了对上述内容的解释,所以我将把它排除在外。 您可以在此处找到 arel 文档。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM