代码之家  ›  专栏  ›  技术社区  ›  user3574603

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

  •  0
  • user3574603  · 技术社区  · 6 年前

    Issue 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')
    

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

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

    1 回复  |  直到 6 年前
        1
  •  1
  •   NeverBe    6 年前

    我没有检查,但也许这种方法可以奏效

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