我需要一个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
查询返回的结果对象是否包含所有角色后,我不想在查询后执行任何数组操作。这是因为我需要从中返回活动记录关系对象。
提前致谢。
试试这个。
User.joins(:roles).includes(:roles).where(:roles => {:name => roles}).group('usermail').having("COUNT(DISTINCt role_id) = 3")
假设该字段usermail用于标识用户。
usermail