Вы не можете сделать прямую цепочку, потому что Group.category('A').category('B')
будет возвращать только те группы с категориями, в которых имя категории является и «A», и «B», и это невозможно (имя может иметь только одно значение)
Вы можете сделать это в несколько шагов, получить идентификаторы каждой категории и выполнить intersection
, чтобы получить идентификаторы, общие для обеих групп.
ids = Group.category('A').pluck(:id) & Group.category('B').pluck(:id)
Group.where(id: ids)
Чтобы создать метод Group
, который работаетс любым количеством категорий, вы можете сделать ...
def self.matching_categories(*category_array)
ids = category_array.map{|category| Group.category(category}.pluck(:id)}.inject(:&)
Group.where(id: ids)
end
Что позволяет вам сделать ...
Group.matching_categories('A', 'B')