当前位置: 首页 > 面试题库 >

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

太叔涵亮
2023-03-14
问题内容

我需要一个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用于标识用户。



 类似资料:
  • 问题内容: 我可以在mysql数据库上打开审核日志记录吗? 我基本上想监视所有查询一个小时,并将日志转储到文件中。 问题答案: 使用–log选项启动mysql: 或在文件中放置以下内容: 任何一种都将所有查询记录到log_file_name。 您也可以使用选项代替来仅记录慢速查询。默认情况下,花费10秒或更长时间的查询被认为是缓慢的,您可以通过设置查询在记录之前必须执行的秒数来更改它。

  • 问题:是否可以构建一个类方法作用域,它可以基于表中数组中的值查询对象?如果是,我怎么做? 更新:一些进展 我知道了如何使用'select'方法创建一个数组,其中包含我想要的所有对象。但是我仍然需要将结果作为活动记录对象返回,所以我创建了一个类方法范围。

  • 问题内容: 如何记录django应用程序执行的所有SQL查询? 我想记录所有内容,包括来自管理站点的SQL。我看到了这个问题和一个常见问题解答,但是我仍然不知道应该把它放在哪里 将所有内容记录到一个文件? 所以我的问题是-我应该怎么做才能拥有一个记录所有SQL语句的文件(例如all-sql.log)? 问题答案: 也许看看https://github.com/django-debug-toolba

  • 我在Rails3中的MongoDB数据库中有一个名为“Stat”的表。 在该表中,有一个名为“服务”的数组字段。 我尝试了各种各样的东西,并广泛地搜索了它,找到了一些线索,但似乎没有任何工作。我有四条记录应该与此查询匹配,但上面返回的是一个零集。 我想做的事情在Rails3/mongo中可能吗?

  • 问题内容: 如何使用PHP CodeIgniter框架的活动记录查询格式进行UNION查询? 问题答案: CodeIgniter的ActiveRecord不支持UNION,因此您只需编写查询并使用ActiveRecord的查询方法即可。