[英]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.