Если вам нужен AND
, то вам нужно убедиться, что количество совпадающих тегов - это именно то количество, которое вы запрашивали, так что это также включает COUNT
.Запрашиваемый вами запрос будет включать IN
.
Было бы удобнее, если бы вы могли гарантировать, что ваши теги всегда хранятся в нижнем регистре.Выполнение таких операций, как LOWER(...)
, в запросе будет проблематичным, если у вас много данных, поскольку это приводит к автоматическому сканированию таблицы и не может быть проиндексировано.
Во-вторых, я бы избегал использования has_and_belongs_to_many
поскольку это пережиток Rails 1.0 дней, который не такой гибкий и надежный, как альтернатива has_many :through
.Единственное различие между этими двумя подходами с точки зрения базы данных состоит в том, что таблица соединения :through
имеет уникальный идентификатор для каждой записи и представлена моделью первого класса.* * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * *1014* * * * * * * * * * * *1014* То, что вы, вероятно, хотите, выглядит как-то так:Эксперимент, чтобы получить правильное поведение.Ваш пример не был таким конкретным.