sql - Rails ActiveRecord 查询以匹配所有参数

标签 sql ruby-on-rails ruby postgresql activerecord

我需要一个 ActiveRecord Postgres 查询来返回匹配通过数组传入的所有参数的结果。

一些背景:我有一个用户模型,它有很多主题(通过专业)。我将主题 ID 作为字符串传递 (Parameters: {"topics"=>"1,8,3"}),然后使用 .split( ',') 所以我以 topic_params = ["1","8","3"] 结束。

现在我试图返回所有拥有匹配/包含所有这些主题的用户。按照this question中的答案进行操作后,我设法返回与任何主题匹配的用户:

@users = User.includes(:topics, :organization).where(:topics => {:id => topic_params})

但我需要它返回匹配所有的结果。我也愿意接受更好的方法来整体完成此类任务。

最佳答案

一种方式是这样的

User.joins(:topics).where(topics: { id: [1, 2, 3] }).group('users.id').having('count(distinct topics.id) = 3')

显然我没有您的确切架构,因此您可能需要稍微调整一下,但这是基本设置。

重要的是 having 子句计数器必须与您要匹配的项目数相匹配。

关于sql - Rails ActiveRecord 查询以匹配所有参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41202437/

相关文章:

sql - 如何获取MySQL对象:Connector cursor with python

mysql - WHERE 比较器的 SQL 多重查询

sql - 触发器postgresql中的距离计算

ruby - 使用 Mechanize 的 Tumblr 登录脚本

ruby - 为什么在 rvm 安装中有两个 rake gemspecs?

mysql - 带左连接的sql最小值

ruby-on-rails - rails : how to set last login datetime

sql - 时区 Rails Postgres

java - 如何根据订阅级别为不同用户设计具有不同功能集的 Web 应用程序?

ruby - 在 .NET 的 Ruby 中使用 3DES 解密十六进制字符串