和Rails中的多个JOIN语句

时间:2013-05-21 17:50:16

标签: sql ruby-on-rails activerecord join

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

离。

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中至少具有一个角色的所有用户。

如何使这句话给我一个交集,而不是一个联盟?

1 个答案:

答案 0 :(得分:0)

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

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