在一个rails应用程序中,我有3个模型,Room,User和UsersRoom,UsersRoom是Room和User之间的关联表。我想查询与多个用户相关的Room。
如果我这样做:
Room.includes(:users_rooms).where(users_rooms: { user_id: user_ids }
字符串
我获取所有房间,其中至少有一个users_room包含一个users_ids。我希望获取每个user_ids都存在users_rooms的房间。
有没有一种干净的方法来做到这一点,而不必在查询房间后循环它们?
2条答案
按热度按时间dgtucam11#
我会尝试以下做法:
字符串
备注:
select
中的COUNT
是必需的,因为某些数据库引擎版本在having
中使用COUNT
时会出现问题,而没有在select
部分中定义它。您可以尝试删除该行。join
在两个表之间执行INNER JOIN
。where
是你想要的。group
将找到的记录分组到一行中,并允许使用COUNT
。having
只返回那些至少关联了user_ids.size
users_rooms
的rooms
。2ul0zpep2#
我会做:
个字符
创建间接关联是可选的,但是抽象使得查询不受连接表实现方式的约束。
例如,
UsersRoom
不是一个很好的名字,你可能想叫它更合适的名字,比如Booking
-这可以让你在不破坏任何东西的情况下这样做。