Rails / ActiveRecord: как найти строки в таблице, которые указывают на строки в другой, которые соответствуют всем указанным значениям столбца? - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть модели с именами 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')

И с этого момента я потерян.Массив labels может быть любой длины.Могу ли я получить нужный результат в одном запросе?

Как найти в таблице строки, которые указывают на строки в другой, которые соответствуют всем указанным значениям столбца?

1 Ответ

0 голосов
/ 05 февраля 2019

Я не проверял, но, возможно, этот подход мог бы работать

Issue.select('issues.id, count(labels.id) as cnt').includes(:labels).where(labels: { name: labels }).group('issues.id').having("cnt = #{labels.size}");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...