首页 > 解决方案 > Rails/ActiveRecord:如何在一个表中找到指向另一个匹配所有指定列值的行的行?

问题描述

我有名为Issueand的模型Label。每个issue可以有很多labels。每个label可以有很多issues

我正在尝试构建一个查询,该查询将返回一个包含所有提供的标签的问题。

例如,如果我提供['bug', 'fix', 'enhancement']我想要的问题至少具有这三个标签中的所有三个标签。

目前,我有:

labels = ['bug', 'fix', 'enhancement']
Issue.joins(:labels).where(labels: { name: labels }).distinct

但这还不够,因为它返回的问题至少有一个标签名称。我看到这是因为生成了“IN”运算符:

WHERE "labels"."name" IN ('bug', 'fix', 'enhancement')

从这里开始,我迷路了。labels数组可以是任意长度。我可以在单个查询中得到我想要的结果吗?

如何在一个表中找到指向另一个与所有指定列值匹配的行的行?

标签: ruby-on-railsactiverecord

解决方案


我没有检查它,但也许这种方法可以工作

Issue.select('issues.id, count(labels.id) as cnt').includes(:labels).where(labels: { name: labels }).group('issues.id').having("cnt = #{labels.size}");

推荐阅读