2009-08-19 30 views
0

Ich bekomme den Durchschnitt aller Anrufe, die zu einem Benutzer gehören. Ein Benutzer kann viele Telefone haben. Also suche ich alle Telefone, die zu diesem Benutzer gehören, und mittle diese Telefonanrufe und füge sie zu einem Array hinzu. Jetzt muss ich alle Anrufe zusammen berechnen. Dies ist, was kommt zurück:Zugriff auf Hash innerhalb eines Arrays mit Ruby auf Schienen

[{["2009-08-14", #<BigDecimal:87e1488,'0.81E2',4(8)>]=>nil, 
["2009-08-15", #<BigDecimal:87e12d0,'0.8100081168 83117E2',20(20)>]=>nil, 
["2009-08-17", #<BigDecimal:87e11a4,'0.81E2',4(8)>]=>nil, 
["2009-08-18", #<BigDecimal:87e108c,'0.8100167224 08027E2',20(20)>]=>nil, 
["2009-08-19", #<BigDecimal:87e0f74,'0.8100543478 26087E2',20(20)>]=>nil}, 
{["2009-08-14", #<BigDecimal:87dd16c,'0.81E2',4(8)>]=>nil, 
["2009-08-15", #<BigDecimal:87dd054,'0.8100081168 83117E2',20(20)>]=>nil, 
["2009-08-17", #<BigDecimal:87dcf3c,'0.81E2',4(8)>]=>nil, 
["2009-08-18", #<BigDecimal:87dcd0c,'0.8100167224 08027E2',20(20)>]=>nil, 
["2009-08-19", #<BigDecimal:87dc8fc,'0.8100543478 26087E2',20(20)>]=>nil}] 

Jeder Hash ist ein anderes Handy. Was ist der beste/schnellste Weg, diese zusammen zu bilden?

Antwort

1

Müssen Sie wirklich die Telefone selbst holen, oder suchen Sie einfach nach dem Durchschnittswert?

Wenn Sie ein: has_many zwischen Benutzern und Telefonen eingerichtet haben, können Sie Folgendes tun.

user.phones.average(:call_count) 

(Natürlich müssen Sie Ihren echten Feldnamen in dort ersetzen.)

, dass eine Abfrage ähnlich wie diese erzeugen:

SELECT avg(`phones`.call_count) AS avg_call_count FROM `phones` WHERE (`phones`.user_id = 1) 
+0

Leider ist die Art und Weise meine Datenbank eingerichtet ist, Ich muss den Durchschnitt wie oben bekommen. – Ryan

+0

Können Sie Ihr Array von Hashes oben aufräumen? Es ist unklar, welche Werte genau du zu mitteln versuchst. – jdl

Verwandte Themen