ActiveRecord: как найти записи по всем связанным с ними записям? - PullRequest
0 голосов
/ 09 марта 2012

С ActiveRecord вы можете передать поле и массив в WHERE следующим образом:

Product.joins(:category).where('category.id' => [x,y,z])

(в этом случае Товар имеет отношение "многие ко многим" с категорией)

При этом используется оператор IN, чтобы найти все продукты в категориях с идентификатором x, y или z

Я хотел бы найти все товары в категориях с идентификатором x, y и z. Я знаю, что вы можете получить такой результат, например, так:

Product.joins(:category).where('category.id' => x).where('category.id' => y).where('category.id' => z)

Другими словами, я хочу найти продукты, которые имеют все поставляемые категории.

Я чувствую, что мог бы сделать что-то намного более простое здесь. Есть идеи?


Обновление: я считаю, этот вопрос актуален , все еще возникают проблемы с его работой. Все еще думаю, что мог бы быть другой способ сделать это.

Ответы [ 2 ]

0 голосов
/ 10 марта 2012

Не пробовал ... но что-то вроде ниже должно дать вам подсказку, чтобы начать -

Product.joins(:categories).select("products.*, GROUP_CONCAT('categories.id') as category_ids").group('products.id').having('category_ids = ?', [1,2,3])
0 голосов
/ 09 марта 2012

Как насчет этого:

Product.joins(:category)
    .where('category.id = ? AND category.id = ? AND category.id = ?',x,y,z)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...