У меня есть таблица под названием cherry_picker_cherries
. Эти записи полиморфно принадлежат модели под названием Pickable
. У них может быть несколько записей в таблице для одного и того же выбираемого, но у него всегда разные cherry_pick_id
.
Моя проблема: у меня есть вишневый выбор под названием Favorite Tree
и отдельный вишневый выбор под названием Favorite Fruit
. Я хочу иметь возможность фильтровать коллекцию выбираемых по нескольким вишневым выборам. Например, я хочу найти все предметы, у которых есть любимое дерево cherry
И любимый фрукт orange
.
Я могу сделать это ужасным образом, используя следующее:
CherryPicker::Cherry.find_by_sql("SELECT * from cherry_picker_cherries t1 JOIN cherry_picker_cherries t2 USING(pickable_id) WHERE t1.value = 'orange'AND t2.value = 'cherry'")
Однако у этого подхода есть несколько недостатков. Он не обрабатывает даже больше Cherry Picks, только два прямо сейчас. Кроме того, результирующий набор преобразуется в массив, но мне нужно вернуть отношение ActiveRecord, чтобы я мог продолжать связывать методы с ним.
Я пытался выяснить, есть ли у AREL какое-то решение для создания простого запроса, соответствующего приведенному выше, но я застрял в тупике. Было бы достаточно легко перебрать хэш параметров, чтобы учесть 2,3, 4 или X количества вариантов выбора, по которым вы могли бы фильтровать.
Возможно ли это вообще в AREL, рельсах или чем-то еще?