Rails从关联中选择计算值

时间:2019-01-31 10:55:26

标签: ruby-on-rails ruby postgresql

我需要计算前10个变体的总销售额,并返回{variant_id,total_sales}的哈希值。但总销售额是计算得出的属性。

我的模特, order.rb

has_many :line_items

line_item.rb

has_one :variant

variant.rb

belongs_to :root_variant # ( a self_join assosciation )

我的查询如下,但由于它不是模型的一部分,因此无法返回计算的销售额

Spree::Variant.joins(line_items: :order).where(spree_orders: {completed_at: params[:start_date]..params[:end_date]})
                                        .select('spree_variants.*, SUM(spree_line_items.quantity) as sales')
                                        .group("spree_variants.root_variant_id, spree_variants.id")
                                        .order('sales DESC').limit(10)

1 个答案:

答案 0 :(得分:1)

您可以像这样获取它:

res = Spree::Variant.joins(line_items: :order).where(spree_orders: {completed_at: params[:start_date]..params[:end_date]})
                                        .select('spree_variants.root_variant_id as root_variant_id, SUM(spree_line_items.quantity) as sales')
                                        .group("spree_variants.root_variant_id")
                                        .order('sales DESC').limit(10)

然后做

  res.map{|m| { variant_id: m.root_variant_id, total_sales: m.sales } }

您假设要获取哈希数组。

让我知道这是否对您有用。

欢呼