Ruby on rails 按一个模型与另一个模型的次数进行订单查询

Ruby on rails 按一个模型与另一个模型的次数进行订单查询,ruby-on-rails,postgresql,Ruby On Rails,Postgresql,我的结构如下: 用户型号:id。。 事件型号:id。。 UserMapEvent模型:用户id,事件id 例如,UserMapEvent表可能有以下记录: User_id | Event_id 1 | 1 1 | 2 3 | 1 4 | 1 当用户喜欢某个事件时,我使用此结构进行保存 现在,如果我在shows控制器中,并且我知道事件的id,我可以获得用户喜欢事件的次数,如: `likes = UsersMapEve

我的结构如下:

用户
型号:id。。
事件
型号:id。。
UserMapEvent
模型:用户id,事件id

例如,
UserMapEvent
表可能有以下记录:

User_id | Event_id
   1    |     1
   1    |     2
   3    |     1
   4    |     1
当用户喜欢某个事件时,我使用此结构进行保存

现在,如果我在shows控制器中,并且我知道事件的id,我可以获得用户喜欢事件的次数,如:

`likes = UsersMapEvent.where("event_id = ?", event.id).count`
例如,我如何获得前三名喜欢的活动?我必须加入这两个表吗

我能想到的唯一解决方案是使用
Event.all
,并让每个人做完全相同的事情,但这听起来很愚蠢,我认为这不是那种“如果它很愚蠢,而且工作正常”的情况


我必须使用哪种类型的数据库操作来获取查询?

您可以使用下面的代码选择前3个喜欢的事件:

Event.left_joins(:users_map_events).group(:id).order('COUNT(users_map_events.id) DESC').limit(3)

非常感谢。我试试看。你能指出一些要读的东西吗?这样我就能理解里面发生了什么?你可以阅读Rails文档中的
ActiveRecord
查询方法。另外,您的
用户
事件
之间的连接方案与Rails
相同,有许多:通过关联。因此,您可以阅读相关文档。