ruby-on-rails - 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)
解决方案
您可以像这样获取它:
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 } }
你想得到哈希数组。
让我知道这是否对您有用。
干杯
推荐阅读
- azure - 在用户使用 Azure 功能和通知中心设置的特定时间向设备发送推送通知
- php - 是否有类似于 Node 的 Webpack 的 PHP 捆绑器
- python - 关于 Selenium Python
- php - smarty php中的foreach语句
- python-3.x - 如何在 python 中设置堆栈驱动程序日志条目的严重性?
- pandas - 从 Pandas 的数据框列中删除特定对象类型的值
- java - 嵌套 if-else 语句的正确格式
- sql - WHERE a AND b 只返回 WHERE b
- github - Github 完整搜索历史
- typescript - 如何在 TypeScript 中基于另一个创建函数,但修复了一些模板参数