2016-07-22 4 views
0

У меня есть активная запись счетов-фактур с атрибутами :quarter и :revenue. Примеры квартал являются «Q1 2015», «Q2 2015», «Q4 2014» и т.д ..Атрибут ActiveRecord для атрибута uniq

То, что я хочу сделать, это сделать карту с каждым :quarter и сумму :revenue для каждого уникального квартала.

Я знаю, как получить карту с каждым уникальным :quarter

@bills.map {|bill| bill.quarter}.uniq 

и я знаю, как сделать карту, которая суммирует :revenue

@bills.map {|bill| bill.revenue}.sum 

Как я могу объединить эти два?

+0

Итак, вы пытаетесь рассчитать, сколько вы заработали за квартал? – siegy22

+0

Это именно то, что я хочу сделать, да! :) – rippster

ответ

2

Вы можете напрямую использовать запрос ActiveRecord.

@bills.group(:quarter).sum(:revenue) 
+0

Я заметил, что '@ bills' не является ActiveRecord. На самом деле я получаю его от JSON, а модель - не-ActiveRecord. Поэтому '@ bills' - массив объектов. Как я могу получить такой же результат? – rippster

+0

Вы можете использовать метод Enumerable: '# group_by', а также' # transform_values' и '# sum', который добавляется к классам Hash и Enumerable по Rails соответственно: ' @ bills.group_by (&: квартал). transform_values ​​{| v | v.sum (&: доход)} ' – Ivan