1

我有一个用户和角色表。我正在使用一个有很多通过关系。我正在尝试创建一个查询,该查询将查找在数组中具有所有角色的用户。

前任。

role_ids = [2, 4, 6]
User.filter(role_ids) would return all users that have roles with ids 2, 4, 6.

这就是我到目前为止所拥有的。

def self.filter(role_ids)
   results = User.joins(:roles).where(roles: {id: role_ids} )
end

该语句的问题在于它返回了至少在 role_ids 中具有一个角色的所有用户。

我如何让这个声明给我一个交集,而不是一个联合?

4

1 回答 1

0

我认为您只要求满足角色过滤条件的用户的唯一实例。如果是这样,那么这应该工作。

def self.filter(role_ids)
  results = User.joins(:roles).where(roles: {id: role_ids} ).uniq
end
于 2013-05-21T19:46:25.413 回答