2015-04-18 2 views
0

У меня есть массив сделок, каждый выглядит следующим образом ...Суммируя объектов в массиве group_by

Transaction:0xc3b8de4 @id="p5qvzdyQZeTyKk97ozbAhAeN0DwVgMh6re13Z", @account="N08xNQywYVUZaqoN9bwAI6BbeBrzyAfKmpzQe", @date="2014-02-03", @amount=100, @name="COMED 4131 Reference#", @meta={"is_risky"=>false, "location"=>{"store_number"=>"10818"}}, @location=nil, @pending=false, @score={"location"=>{}, "name"=>0.2}, @type={"primary"=>"unresolved"}, @category=nil, @category_id=nil>]} 

Я хочу, чтобы сгруппировать операции по месяцам, так у меня есть это ...

@income_by_month = @payroll_transactions.group_by { |t| t.date.to_date.month }) 

Какие группы транзакций по месяцам.

Теперь мне нужна сумма объекта «сумма» в каждом месяце транзакций. Поэтому мне нужно общее количество всей суммы за каждый месяц. Вот что у меня есть, но я не добился успеха.

@payroll_transactions = @user.transactions.find_all { |t| t.category_id == '21009000' } #finds all payroll transactions for all months 
@income_by_month = @payroll_transactions.group_by { |t| t.date.to_date.month }) #groups transactions into month groups 
@income_by_month.map(&:amount).inject(0, &:+) #I need a method to sum the total of amounts for each month 

Заранее спасибо

ответ

1

Это должно сделать:

@income_by_month = @payroll_transactions.group_by { |t| t.date.to_date.month }).map do |month, transactions| 
    [month, transactions.sum(&:amount)] 
end.to_h 
+0

Отлично! Спасибо за помощь! – SupremeA

0

Что об этом? compact удаляет значения nil, не знаю, понадобится ли вам это или нет.

@income_by_month.map(&:amount).compact.reduce(&:+) 

Вам может понадобиться @income_by_month.month(:april).map..., если я вас правильно понимаю, и вы все еще может потребоваться для реализации этого.

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