Я бы хотел добавить возможность фильтровать продукты по нескольким категориям в приложении электронной коммерции Rails. В настоящее время я разрешаю фильтрацию товаров по категориям, но теперь я хочу предоставить возможность фильтровать дальше.
Например, я бы хотел, чтобы пользователь мог выбрать «Мужская» и «Верхняя одежда», чтобы отображать только товары в обеих этих категориях.
Зная, что при предоставлении массива идентификаторов категорий в моем запросе Product будут найдены продукты в любой из указанных категорий, и надеясь на хорошее решение типа ActiveRecord-y, я сначала попытался добавить несколько условий categories.id
в запрос, но это не сработало.
Product.joins(:categories).where(:'categories.id' => 123, :'categories.id' => 456)
В результате получилось, что первый идентификатор категории был перезаписан вторым.
И, конечно, здесь будут найдены товары в любой из категорий, а не только товары в обеих:
Product.joins(:categories).where(:'categories.id' => [123, 456])
Кроме того, нужное мне решение должно работать с произвольным числом категорий. Это может быть два, это может быть три или больше.
После некоторого исследования я не думаю, что есть хороший способ Rails-y сделать это, но я застрял в поиске действительно правильного решения.
Мое приложение работает на Rails 5.2 с MariaDB.