Суммирование связанных таблиц с использованием Active Record - PullRequest
3 голосов
/ 31 декабря 2010

Как можно суммировать все «итоговые» столбцы в ассоциации?

Мой SQL-фу отстой, поэтому я хотел бы узнать, как это сделать, используя Active Record для моего приложения rails 2.3.5 (так что пока нет никакого причудливого синтаксиса;

Допустим, у меня есть:


Shop 

has_many :customers
has_many :transactions, :through => :customers

Так нормально.


shop = Shop.first
shop.transactions
=> 100 

Хорошо, все, что связано с вопросом:

Я хочу суммировать столбец total в транзакциях за прошлый год (1 января 2010 г., 31 декабря 2010 г.) и отображать их по клиенту.

Несмотря на то, что я знаю, как группировать транзакции и находить с условиями, это часть суммы, где мое отсутствие SQL подводит меня.


first = Date.new(2010, 01, 01)
last = Date.new(2010, 12, 31)

shop.transactions(:conditions => {:created_at => first..last}, :group => :customer_id, :include => sum(:total))

Я только что сделал удар, я на правильном пути?

Ответы [ 2 ]

8 голосов
/ 31 декабря 2010

shop.transactions.sum(:total, :conditions => {:created_at => first..last}, :group => :customer_id)

Это выглядит как более простой способ.Теперь я знаю, что сумма тоже может принимать атрибуты AR.круто.

0 голосов
/ 31 декабря 2010

Изучите методы сбора.

Вы можете делать такие вещи, как:

transactions = Shop.transactions
total = 0
sum = transactions.collect{|i| total+=i.transaction.amount}

Заменить сумму своей собственностью, которая содержит сумму транзакции.

Вы также можете использовать .sum

sum = transactions.to_a.sum(&:amount) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...