2016-07-22 7 views
0

Ich habe einen aktiven Datensatz von Rechnungen mit den Attributen :quarter und :revenue. Beispiele für Quartal sind „Q1 2015“, „Q2 2015“, „Q4 2014“, etc ..ActiveRecord Summe pro uniq Attribut

Was ich tun möchte, ist eine Karte machen mit jedem :quarter und die Summe von :revenue für jedes einzelne Viertel.

Ich weiß, wie eine Karte mit jeder eindeutigen :quarter

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

und ich kennen lernen, wie man eine Karte machen, Wie kann ich die beiden kombinieren die :revenue

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

fasst?

+0

Sie versuchen also zu berechnen, wie viel Sie pro Quartal verdient haben? – siegy22

+0

Das ist genau was ich machen will, ja! :) – rippster

Antwort

2

Sie können eine ActiveRecord-Abfrage direkt verwenden.

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

Ich bemerkte, dass '@ bills' kein ActiveRecord ist. Eigentlich bekomme ich es von einem JSON und das Modell ist ein Nicht-ActiveRecord. Also '@ bills' ist ein Objekt-Array. Wie könnte ich damit das gleiche Ergebnis erzielen? – rippster

+0

Sie können die Methode Enumerable verwenden: '# group_by' sowie' # transform_values' und '#sum', die von Rails jeweils zu den Klassen Hash und Enumerable hinzugefügt werden: ' @ bills.group_by (&: viertel). transform_values ​​{| v | v.sum (&: Umsatz)} ' – Ivan