Рельсы левого внешнего соединения с условием для левой таблицы не включают все записи правой таблицы - PullRequest
0 голосов
/ 04 февраля 2019

Я использую Rails 5 и Postgresql.Мои модели выглядят следующим образом: Вариант has_many line_items LineItem own_to Order Order has_many LineItems

Что мне нужно сделать, так это сделать левый внешний переход к таблице вариантов с line_items и заказами, чтобы рассчитать сумму заказов и общую сумму, сгруппированные по вариантам,Мне нужно оставить вариант соединения слева с заказами, выполненными в определенный диапазон дат, однако добавление этого условия в таблицу заказов (правая сторона соединения) приводит к исключению множества записей из левой стороны варианта.Ниже мой оригинальный запрос

Spree::Variant.left_outer_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_count, SUM(spree_line_items.quantity * spree_line_items.price) as sales_amount')
                  .group('spree_variants.root_variant_id, spree_variants.id')

Что я пытаюсь сделать сейчас, это включить условие даты между в объединении, но всегда получаю ошибку, вот что я пытаюсь сделать и не могу найтиошибка.

Spree::Variant.joins("LEFT OUTER JOIN spree_line_items ON spree_line_items.variant_id = spree_variants.id LEFT OUTER JOIN spree_orders ON spree_orders.id = spree_line_items.order_id AND spree_orders.completed_at BETWEEN #{params[:start_date]} AND #{params[:end_date]}")
                  .select('spree_variants.*, SUM(spree_line_items.quantity) as sales_count, SUM(spree_line_items.quantity * spree_line_items.price) as sales_amount')
                  .group('spree_variants.root_variant_id, spree_variants.id')

Параметры start_date и end_date следующие:

params[:end_date] = Time.current.end_of_day
params[:start_date] = (Time.current - 200.days).beginning_of_day

то есть параметры [: end_date]

Пн, 04 февраля 201923:59:59 EET +02: 00

SQL, созданный моим вторым запросом, дублируется, он выдает 2 точных запроса SQL. У кого-нибудь есть лучшее решение или идея, как это исправить?

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