[英]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 users
和users 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.