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

时间:2019-02-04 23:35:10

标签: ruby-on-rails activerecord

我有名为IssueLabel的模型。每个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数组可以是任意长度。我可以在一个查询中得到想要的结果吗?

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

1 个答案:

答案 0 :(得分:1)

我没有检查它,但也许这种方法可行

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