按一个模型具有另一个模型的次数进行排序查询

时间:2017-03-25 06:28:54

标签: ruby-on-rails postgresql

我有以下结构:

User型号:id,.. Event型号:id,.. UserMapEvent型号:user_id,event_id

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

User_id | Event_id
   1    |     1
   1    |     2
   3    |     1
   4    |     1

当用户喜欢某个活动时,我会使用此结构进行保存。

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

`likes = UsersMapEvent.where("event_id = ?", event.id).count`

例如,如何获得前3个喜欢的活动?我必须加入2桌吗?

我能想到的唯一解决方案是使用Event.all,并且每个人都做同样的事情,但这听起来很愚蠢,我认为这不是其中一种情况'如果它&# 39;愚蠢而且工作得很好'。

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

1 个答案:

答案 0 :(得分:0)

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

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