首页 > 解决方案 > Rails 从关联中选择计算值

问题描述

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

我的模型,order.rb

has_many :line_items

line_item.rb

has_one :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)

标签: ruby-on-railsrubypostgresql

解决方案


您可以像这样获取它:

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 } }

你想得到哈希数组。

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

干杯


推荐阅读