小编典典

匹配查询中所有活动记录中的关系

sql

我需要一个activerecord查询来匹配params数组中的所有项目。

假设用户具有has_many个角色。每个角色都有一个名字

当我通过[‘演员’,’制作人’,’歌手’]时。我希望查询返回给我具有所有这三个角色或更多角色的用户。

但是我下面的方法实现将返回具有至少一个与传递的数组中的角色名称匹配的角色名称的用户

我当前的方法基于找到任何标签而不是“ MATCH ALL”来给出结果

class User < ActiveRecord::Base
    has_many :roles

    def self.filter_by_roles(roles)
        User.joins(:roles).includes(:roles).where(:roles => {:name => roles})
    end
end

查询返回的结果对象是否包含所有角色后,我不想在查询后执行任何数组操作。这是因为我需要从中返回活动记录关系对象。

提前致谢。


阅读 151

收藏
2021-04-14

共1个答案

小编典典

试试这个。

User.joins(:roles).includes(:roles).where(:roles => {:name => roles}).group('usermail').having("COUNT(DISTINCt role_id) = 3")

假设该字段usermail用于标识用户。

2021-04-14