Я пытаюсь создать отчет для среднего количества вызовов, которые человек делает в день. Следующее генерирует правильный список, но если пользователь не совершал никаких вызовов в определенный день, он не отображается. Very much like this problemрубин на рельсах средний за день
Проходя по ссылке выше, у меня есть этот код:
from_date = Time.now.at_beginning_of_month.to_s(:db)
to_date = Time.now.tomorrow.to_s(:db)
ave_calls = @current_user.calls.average(:num_of_calls, group => "DATE(calls.start_time_stamp)",
:conditions => ["calls.created_at BETWEEN ? AND ?",from_date, to_date])
call_aves = (Time.now.at_beginning_of_month..Time.now.tomorrow).map{|dt| [dt, ave_calls[dt.strftime "%Y-%m-%d"] || 0]}
Сначала я просто застрял в call_aves значение для открытого флэш карт, и он сломал ее, kind've выглядел он пошел в бесконечный цикл. Поэтому я вошел в свой отладчик, чтобы узнать, что происходит.
irb(#<ReportsController:0x47b7524>):008:0> call_aves[0]
=> [Sat Aug 01 00:00:00 -0400 2009, 0]
Поскольку я поднимаюсь в массиве, я замечаю, что он увеличивается только за секунды, а не по дням. Например:
irb(#<ReportsController:0x47b7524>):009:0> call_aves[30]
=> [Sat Aug 01 00:00:30 -0400 2009, 0]
Как я могу получить это, чтобы подняться днем, а не вторым?
Пробовал это уже, выбрасывает исключение. undefined метод 'strftime 'для" 2009-08-01 00:00:00 ": String. strftime и to_s не любят друг друга. – Ryan
Похоже, вы используете strftime для фильтрации времени из объекта Time, оставляя только дату. Использование объекта Date не включает время, поэтому strftime не требуется. Просто используйте to_s и формат даты. Дополнительная информация о форматах дат: http://onrails.org/articles/2008/08/20/what-are-all-the-rails-date-formats – Jarrod