你如何从Spree获得畅销书清单?

时间:2016-09-26 21:15:19

标签: ruby-on-rails activerecord spree

我正在使用Spree 2.3.1并且我一直在尝试根据数量获得2天的“畅销书”列表...任何想法?

到目前为止,我已尝试使用ActiveRecords助手提出查询,我很擅长:

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

我不知道还能做什么。看起来像是开箱即用的东西。

3 个答案:

答案 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。