如何使用ActiveRecord按多个类别过滤产品?

问题描述 投票:2回答:1

我想添加将多个类别的产品过滤到Rails电子商务应用程序的功能。我目前允许按类别过滤产品,但现在我想提供进一步过滤的功能。

例如,我想允许用户选择“Men's”和“Outerwear”来仅显示这两个类别的产品。

知道在我的产品查询中提供类别ID数组会找到任何指定类别的产品,并希望有一个很好的ActiveRecord-y类型解决方案,我首先尝试在查询中添加多个categories.id条件,但这不起作用出。

Product.joins(:categories).where(:'categories.id' => 123, :'categories.id' => 456)

结果是第一个类别ID被第二个类别覆盖。

当然,这将在以下任一类别中找到产品,而不仅仅是两者中的产品:

Product.joins(:categories).where(:'categories.id' => [123, 456])

此外,我需要的解决方案应该使用任意数量的类别。可能是两个,可能是三个或更多。

在做了一些研究之后,我认为没有一个很好的Rails-y方法来做到这一点,但我仍然坚持找到真正正确的解决方案。

我的应用程序使用MariaDB运行Rails 5.2。

ruby-on-rails activerecord rails-activerecord
1个回答
1
投票

根据@ muistooshort上面的评论,我找到了这个SO帖子,我需要的解决方案:Selecting posts with multiple tags

像这样更新我的查询给了我想要的产品,所有指定类别的产品(为了便于阅读而包装的行):

Product.joins(:categories).where(:categories => { :id => category_ids })
    .having('count(categories.name) = ?', category_ids.size)
    .group('products.id')
© www.soinside.com 2019 - 2024. All rights reserved.