我正在使用Spree 2.3.1并且我一直在尝试根据数量获得2天的“畅销书”列表...任何想法?
到目前为止,我已尝试使用ActiveRecords助手提出查询,我很擅长:
Spree::Product.includes(variants: {line_items: :order}).group('spree_products.id')
我不知道还能做什么。看起来像是开箱即用的东西。
答案 0 :(得分: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")
答案 1 :(得分:0)
这是我将使用的方法:
第1步 - SQL / Rails查询
苏米特在评论中提出的建议。我会扩展查询以按日期限制订单。
仅在您需要时使用它:例如,管理面板很少被浏览或网站本身不那么受欢迎。
步骤2 - 通过添加任务来扩展功能,以更新分类中的产品位置
如果您想在拥有大量用户的网站上为前端用户提供畅销视图,那么每次用户显示产品列表时执行繁重的计数SQL操作都不是一个好主意。相反,您可以使用Products与Taxons相关的现有位置字段,从前一点执行查询并相应地更新位置。您也可以在行项目所属的分类范围内的每个订单之后触发仓位更新。
答案 2 :(得分:-1)
您可以使用Qwertie为您提供的查询。您可以在Gemfile中添加gem,并在代码中使用它,而不是这样做:
gem" spree_best_sellers",:git => " https://github.com/sylvinho81/spree_best_sellers.git",:branch => ' 3-0稳定'
由于您使用的是Spree 2.3.1,因此您需要调整gem。