Выбор записи, где присутствуют все ассоциации - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть пользователь с уровнями has_many. Допустим, у меня есть уровни 1, 2, 3 и 4. Как искать пользователей, которые имеют ассоциации с уровнями 2 и 3, но не с 4?
Я не получил для себя. Я хотел сосредоточиться сначала на части прежде, чем «но», однако строка, которую я придумал:

User.includes(:levels).where(levels: {id: [2, 3]}) 

возвращает также пользователей, которые связаны только с уровнем 2, а не только пользователей с уровнями 2 и 3.

Ответы [ 2 ]

0 голосов
/ 28 апреля 2018
User.includes(:levels).where(levels: {id: 2}).where(levels: {id: 3})
0 голосов
/ 28 апреля 2018

Ниже будет работать, если порядок полученных идентификаторов только [2,3]. Для [3, 2] он не покажет никаких записей. Если объект находится в последовательности, он должен работать.

User.includes(:levels).map(&:levels).select { |l| l if l.ids == [2, 3] }
...