假设我有两个模型UsersAppointments其中一个用户有很多约会。
约会可以有两种不同的类型:typeAtypeB
如何编写查询以按用户拥有的typeB约会数量对其进行排序?
我查看了counter_缓存,但它似乎只计算关联数(因此在本例中是指用户拥有的约会数),不允许计算特定类型的约会。

最佳答案

使用joins(内部加入)您将只获得那些至少有一个关联约会的用户:

User.joins(:appointments)
    .where(appointments: { type: 'typeB' })
    .group('users.id')
    .order('count(appointments.id) DESC')

如果您改用includes(left outer join),则会在列表的末尾显示所有未预约'typeB'的用户的列表。

07-27 22:45