Несколько операторов SUM или подзапросов в Rails 3, возможно, с использованием scope.Кто-нибудь? - PullRequest
1 голос
/ 18 января 2011

Для рельсов 3 класса типа

class Item < ActiveRecord::Base
  has_many :production_runs
  has_many :deliveries
end

, где как производственные прогоны, так и поставки имеют атрибут «количество» для количества изделий в данном конкретном производстве или доставке.

Я хотел бы запросить элементы и (возможно, используя область?) Добавить сумму () величин из обеих таблиц к результату. Что-то вроде:

select items.*, (select SUM(production_runs.quantity) as runs from production_runs where production_runs.item_id = 42), (select SUM(deliveries.quantity) as dels from deliveries where deliveries.item_id = 42) from items where items.id = 42;

Что дает правильный результат для одного элемента, но я бы хотел как-то свернуть эти суммы в более общий запрос.

Я безуспешно пробовал добавлять области в классы Item, ProductionRun и Delivery. Было бы неплохо использовать область видимости, так как я мог бы связать ее с другими условиями по мере необходимости, но на самом деле я был бы рад любому общему решению, которое было бы более оптимальным, чем просто поиск наборов элементов и затем повторение.

Кто-нибудь знает лучший способ сделать это?

Спасибо

1 Ответ

0 голосов
/ 17 февраля 2012
scope :sum_column_name, lambda{
    sum("column name")}

должно работать

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