#ruby-on-rails
#ruby-on-rails
Вопрос:
Это, вероятно, ужасное название, но оно продолжается.
У меня есть две модели: Item и Category. Это отношение «многие ко многим» (элементы могут принадлежать нескольким категориям, категории могут содержать несколько элементов).
Каков наилучший способ поиска (например, по имени) списка категорий и поиска всех элементов, включенных в них? Если бы я использовал SQL, я бы сделал что-то вроде следующего:
SELECT * FROM items
WHERE category_id in (
SELECT id FROM category
WHERE name IN ('cat1', 'cat2', 'cat3')
)
или что-то в этом роде, но я бы хотел сделать это по-железнодорожному, если это возможно.
Спасибо!
Ответ №1:
Вы можете сделать
Item.joins(:categories).where("categories.name" => ['cat1', 'cat2', 'cat3'])
Ответ №2:
Редактировать
Item.includes(:categories).where("categories.name IN(?)", list_of_names)
Комментарии:
1. Бесполезно — я начинаю со списка «имен», а не идентификаторов. Сначала нужно просмотреть идентификаторы — достаточно просто, если мы используем два отдельных запроса, но я надеюсь сделать это с помощью одного.
2. SQLite3:: SQLException: нет такого столбца: category.name : ВЫБЕРИТЕ ПУНКТ «элементы».* ИЗ «элементов», ГДЕ (category.name IN(‘музыка’)) — результат этого кода. Редактировать: изменение включений на объединения исправлено 🙂 Спасибо вам и пользователю 229688.