假设我有两个模型Users
和Appointments
其中一个用户有很多约会。
约会可以有两种不同的类型:typeA
和typeB
。
如何编写查询以按用户拥有的typeB
约会数量对其进行排序?
我查看了counter_缓存,但它似乎只计算关联数(因此在本例中是指用户拥有的约会数),不允许计算特定类型的约会。
最佳答案
使用joins
(内部加入)您将只获得那些至少有一个关联约会的用户:
User.joins(:appointments)
.where(appointments: { type: 'typeB' })
.group('users.id')
.order('count(appointments.id) DESC')
如果您改用
includes
(left outer join),则会在列表的末尾显示所有未预约'typeB'
的用户的列表。