Область AR 3 в отношении HBTM для извлечения элементов, соответствующих всем идентификаторам - PullRequest
2 голосов
/ 29 июня 2011

ОК, название не очень хорошее ...

Вот пример:

class Product
  has_and_belongs_to_many :categories
end

Я хочу создать область, которая возвращает товары, которые имеют ВСЕ идентификаторы категорий, которые я отправил в качестве аргумента.

Если я использую Product. 4. Я хотел бы, чтобы в продуктах были указаны как минимум все категории, которые я отправляю в качестве параметра.

Например:

Product.with_all_categories([1, 2, 3, 4]) # => get all the Product that have categories 1, 2, 3 AND 4 (at least, it could be more).

Ответы [ 2 ]

1 голос
/ 08 июля 2011

Спасибо, @tal!

Вот моя реализация вашего решения в чистой области видимости AR: https://gist.github.com/1071862

:)

1 голос
/ 29 июня 2011

Полагаю, вам не понравится ответ: это не просто.

AFAIK, это не то, что вы можете сделать в AR напрямую. Вы должны пройти через find_by_sql. Запрос, который вам нужен, выглядит примерно так:

SELECT products.* FROM products
INNER JOIN categories_products cat1 ON products.id = 
cat1.product_id
INNER JOIN categories_products cat2 ON products.id = 
cat2.product_id
INNER JOIN categories_products cat3 ON products.id = 
cat3.product_id
WHERE (cat1.category_id = 1) and (cat3.category_id = 2) and (cat3.category_id = 3)

добавление внутреннего соединения и единицы и предложения для каждой категории. Есть и другие возможные запросы, этот должен хорошо работать в MySQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...