簡體   English   中英

如何使用 ActiveRecord 按多個類別過濾產品?

[英]How can I filter products by multiple categories with ActiveRecord?

我想為 Rails 電子商務應用程序添加按多個類別過濾產品的功能。 我目前允許按類別過濾產品,但現在我想提供進一步過濾的能力。

例如,我想允許用戶選擇“男士”和“外套”以僅顯示這兩個類別中的產品。

知道,在我的產品的查詢提供類別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。

根據上面@muistooshort 的評論,我找到了這個 SO 帖子,其中包含我需要的解決方案: 選擇帶有多個標簽的帖子

像這樣更新我的查詢給出了我想要的產品,所有指定類別中的產品(為了可讀性而包裝的行):

Product.joins(:categories).where(:categories => { :id => category_ids })
    .having('count(categories.name) = ?', category_ids.size)
    .group('products.id')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM