2015-11-16 3 views
2

Возможно ли сделать область в Rails с запросом where IN (?), который будет проверять точные соответствия?Rails scope - где в точном соответствии

, например:

Post.joins(:tags).where('tags.id IN (?)', [1, 2, 3, 4]) 

найти сообщения с тегами 1, 2, 1, 2, 3 и 1, 2, 3, 4. Но нужно найти только сообщение с тегами 1, 2, 3, 4.

+1

Хорошо, я не использую рельсы, так что это возможно для вас, чтобы группировать сообщения, агрегировать теги в массив, а затем использовать сравнение массива? –

ответ

1

Идея получить согласования всех значений в IN пункте вы должны сделать это:

tag_ids = [1, 2, 3, 4] 
Post.joins(:tags).where('tags.id IN (?)', tags_ids).group("posts.id") 
        .having("COUNT(posts.id) >= ?", tag_ids.length) 

Я надеюсь, что это поможет вам.

+0

Для меня это возвращает сообщения, которые также имеют другие теги tag_ids, кроме [1, 2, 3, 4]. Есть ли способ получить точное соответствие, т. Е. Сообщения с только тегами, имеющими идентификаторы 1, 2 и 3? – jazzinthemorning

Смежные вопросы