以下是示例:
class Product
has_and_belongs_to_many :categories
end
我想创建一个范围,该范围返回具有我作为参数发送的所有类别ID的产品。
如果我使用Product.includes(:categories).where(:“categories.categorie_id”=> [1,2,3,4]),它会为我提供所有类别为1,2,3的产品,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).
答案 0 :(得分:1)
我想你不会喜欢这个答案:这不容易。
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中表现良好。
答案 1 :(得分:1)