2010-12-30 10 views
3

Wie summiert man alle "total" Spalten in einer Assoziation?Summe zugeordnete Tabellen mit Active Record

Mein SQL-fo saugt, also würde ich gerne lernen, wie man das mit Active Record für meine rails 2.3.5 app macht (also bitte keine schicke Syntax, bitte ;-) Und ich bin auf MySQL.

Lassen Sie uns sagen, ich habe:


Shop 

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

So normale Sachen.


shop = Shop.first 
shop.transactions 
=> 100 

Ok, alles, was Hintergrund für die Frage:

Ich möchte aus dem vergangenen Jahr die total Spalte in den Transaktionen Summe (1. JANUAR 2010..Dec 31 2010) und zeigt sie vom Kunden .

Während ich weiß, wie man Transaktionen gruppiert und mit Bedingungen findet, ist es die Summe, wo mein Mangel an SQL mich im Stich lässt.


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)) 

Ich habe gerade einen Stich, ich bin auf dem richtigen Weg?

Antwort

8

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

Dies sieht aus wie ein einfacher Art und Weise verwenden .sum. Ich weiß jetzt, dass diese Summe auch AR-Attribute annehmen kann. cool.

0

Schauen Sie in Collect-Methoden.

Sie können Dinge tun, wie:

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

ersetzen Menge mit Ihrer Eigenschaft, die den Betrag der Transaktion enthält.

könnten Sie auch

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

Ich habe gerade eine Antwort gefunden, die für mich funktioniert. wird unten posten. – pjammer

+0

auch, würde ich inject verwenden, wenn ich das tun würde. Das alte Ich hätte es, aber ich versuche, die Datenbank für das zu benutzen, was es gut ist. – pjammer