Rails Выберите рассчитанные значения из ассоциаций - PullRequest
0 голосов
/ 31 января 2019

Мне нужно рассчитать общий объем продаж топ-10 вариантов и вернуть хэш {option_id, total_sales}.но общий объем продаж является расчетным атрибутом.

Мои модели, order.rb

has_many :line_items

line_item.rb

has_one :variant

option.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 голосов
/ 31 января 2019

Вы можете получить его следующим образом:

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

Предполагается, что вы получите массив хэшей.

Дайте мне знать, если это работает для вас.

Приветствия

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...