我需要一个 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/