首页 > 解决方案 > 选择所有关联都存在的记录

问题描述

我有一个拥有多个级别的用户。假设我有 1、2、3 和 4 级。如何搜索与 2 级和 3 级关联但不与 4 级关联的用户?
我自己没有得到。我想首先关注“但是”之前的部分,但是我想出了一行:

User.includes(:levels).where(levels: {id: [2, 3]}) 

还返回仅与级别 2 关联的用户,而不仅是同时具有级别 2 和级别 3 的用户。

标签: ruby-on-railssearchactiverecordassociationswhere

解决方案


如果获得的 id 的顺序仅为 [2,3],则以下将起作用。对于 [3, 2] 它将不显示任何记录。如果对象是按顺序排列的,那么它应该可以工作。

User.includes(:levels).map(&:levels).select { |l| l if l.ids == [2, 3] }

推荐阅读