2010-12-30 2 views
3

Как суммировать все «итоговые» столбцы в ассоциации?Связать связанные таблицы с использованием активной записи

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

Скажем, у меня есть:


Shop 

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

Так нормальные вещи.


shop = Shop.first 
shop.transactions 
=> 100 

Хорошо, все, что фон на вопрос:

Я хочу просуммировать total колонку в сделках с прошлого года (1 января 2010..Dec 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)) 

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

ответ

8

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

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

0

Посмотрите на методы сбора.

Вы можете сделать что-то вроде:

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

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

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

sum = transactions.to_a.sum(&:amount) 
+0

Я только что нашел ответ, который работает для меня. опубликует ниже. – pjammer

+0

также, я бы использовал инъекцию, если бы собирался это сделать. Старое меня было бы, но я пытаюсь использовать базу данных, для чего это хорошо. – pjammer

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