доступ к хешу внутри массива с ruby ​​на рельсах - PullRequest
0 голосов
/ 19 августа 2009

Я получаю среднее значение всех вызовов, которые принадлежат пользователю. Пользователь может иметь много телефонов. Поэтому я ищу все телефоны, принадлежащие этому пользователю, и в среднем звонит по телефонам и добавляю их в массив. Теперь мне нужно усреднить все звонки вместе. Вот что возвращается:

[{["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}]

Каждый хеш - это отдельный телефон. Каков наилучший / самый быстрый способ их усреднения?

1 Ответ

1 голос
/ 19 августа 2009

Вам действительно нужно выбрать сами телефоны или вы просто ищете среднее значение?

Если между пользователями и телефонами настроено: has_many, вы можете сделать следующее.

user.phones.average(:call_count)

(Очевидно, вам нужно заменить ваши настоящие имена полей там.)

Это сгенерирует запрос, подобный следующему:

SELECT avg(`phones`.call_count) AS avg_call_count FROM `phones` WHERE (`phones`.user_id = 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...