2016-09-26 53 views
1

我正在Spree 2.3.1上工作,我一直試圖根據2天的數量得到「暢銷書」的清單......任何想法?您如何獲得Spree暢銷品清單?

到目前爲止,我一直試圖拿出一個查詢中使用ActiveRecords幫手,我敢在新:

Spree::Product.includes(variants: {line_items: :order}).group('spree_products.id') 

我不知道還能做什麼。似乎這將是可用的開箱即用的東西。

+0

SELECT SUM(quantity),variant_id FROM「spree_line_items」INNER JOIN spree_orders ON spree_orders.id = spree_line_items.order_id WHERE spree_orders.state ='complete'GROUP BY variant_id; –

回答

0

這是我使用的方法:

第1步 - SQL/Rails的查詢

正如在他的評論中所建議的Sumeet。我會展開查詢以按日期限制訂單。

  • 易於實現。
  • 數據庫非常沉重。

只有當您需要它時才使用它:管理面板很少被查看或網站本身並不受歡迎。

第2步 - 通過添加任務更新類羣

產品的位置。如果你想爲網站上的前端用戶,有很多用戶也止跌」提供了一個暢銷視圖擴展功能每次用戶顯示產品列表時,最好大量計算SQL操作。相反,您可以使用產品與分類關係中現有的位置字段,執行前一點的查詢並相應地更新位置。您也可以在訂單項屬於的分類範圍內的每個訂單之後觸發位置更新。

+0

這是一個前端解決方案,所以我會牢記這一點。我結束了寫入原始的SQL,但我用一個別名捕獲總和,即sum(line_items.quantity)作爲total_qty。但是,我不斷收到一個錯誤,指出產品沒有total_qty屬性,但是使用raw sql執行相同的查詢。去搞清楚! –

3

這種寶石,似乎你在找什麼https://github.com/sylvinho81/spree_best_sellers

我提取從代碼查詢,這就是在多少已經售出爲了獲得產品列表。

Spree::Product.active.select("spree_products.*, SUM(spree_line_items.quantity) as total_qty, spree_line_items.variant_id"). 
    joins(:line_items).joins("INNER JOIN spree_orders ON spree_orders.id = spree_line_items.order_id"). 
    where("spree_orders.state = 'complete'"). 
    group("spree_line_items.variant_id, spree_products.id").order("total_qty DESC") 
-2

您可以使用Qwertie爲您提供的查詢。而不是做你可以在你的Gemfile添加寶石和在代碼中使用它:

寶石「spree_best_sellers」:混帳=> 「https://github.com/sylvinho81/spree_best_sellers.git」:支=> 「3-0穩定'

由於您使用的是Spree 2.3.1,因此您需要修改該寶石。

+0

雖然此鏈接可能回答問題,但最好在此處包含答案的重要部分並提供供參考的鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 - [來自評論](/ review/low-quality-posts/17537232) –