2017-02-03 2 views
2

Не удалось перевести SQL-запрос в ActiveRecord. Вот упрощенная версия моего моделирования домена:выберите сумму сгруппированных строк в activerecord

Пользователь # has_many: корзины

Basket Дата #: Дата, user_id: целое число - много: line_items, belongs_to: пользователь

LineItem # количество: целое число - belongs_to: корзина

я могу сделать следующий запрос в SQL:

SELECT baskets.date, SUM(line_items.quantity) from baskets 
INNER JOIN line_items ON line_items.basket_id = basket.id 
WHERE baskets.user_id = 2 
GROUP BY baskets.id 
ORDER BY baskets.date DESC 

При выполнении этого запроса в PGAdmin, я получаю две колонки Я хочу: даты корзины и сумма всех величин line_item, связанных с этой конкретной корзиной.

Однако, когда я пытаюсь составить запрос ActiveRecord для тех же данных:

User.find(2).baskets 
    .select('baskets.date,'SUM(line_items.quantity)') 
    .joins(:line_items) 
    .group('baskets.id') 
    .order('baskets.date desc') 

возвращает даты корзины, но не суммы сгруппированных Line_Item величин. В идеале я хотел бы получить результат в следующем формате, например {date => количество, дата => количество ...}, но не знаю, как туда добраться.

ответ

1

Однополочные кавычки Мессинг это для вас, это должно работать

User.find(2).baskets 
    .joins(:line_items) 
    .group('baskets.id') 
    .order('baskets.date desc') 
    .select("baskets.date, sum(line_items.quantity) as quantity_sum") 

Вы также можете использовать pluck, который возвращает массив даты и просуммировать

User.find(2).baskets 
    .joins(:line_items) 
    .group('baskets.id') 
    .order('baskets.date desc') 
    .pluck("baskets.date, sum(line_items.quantity) as quantity_sum") 
+1

Высокий. Всегда мелочи. И хорошо знать о том, чтобы сорвать! Спасибо. – user7280963

Смежные вопросы