Rails Выберите рассчитанные значения из ассоциаций

0

Мне нужно рассчитать общий объем продаж топ-10 вариантов и вернуть хэш {option_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)
  • 0
    Вы используете MySQL или Postgresql?
  • 0
    Postrgresql @jarlh, я хотел написать sql не mysql
Показать ещё 2 комментария

1 ответ

0

Вы могли бы получить это как:

res = Spree::Variant.joins(line_items: :order).where(spree_orders: {completed_at: params[:start_date]..params[:end_date]})
                                        .select('spree_variants.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 } }

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

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

ура

Ещё вопросы

Сообщество Overcoder
Наверх
Меню