Используя запрос GROUP BY, вы получите группы на основе существующих записей, поэтому, если в столбце группировки нет записей с данным значением, групп для этого значения не будет.База данных не знает, как добавить другие значения даты, которые могут вас заинтересовать.
Что бы я сделал, чтобы получить то, что вам нужно, это создать новый хэш со значением по умолчанию 0
и затем объединитьрезультат вашего запроса в этом.Когда вы впоследствии попытаетесь получить любое значение из этого хэша, для которого нет записи, вы получите 0 в качестве результата.
Редактировать: Удалить .values
date_counts = Hash.new(0)
date_counts.merge! Item.group("date(created_at)").count
В качестве альтернативы,если вы хотите убедиться, что в хэше есть записи для каждой даты в диапазоне, так что вы можете перебирать их, ...
date_counts = {}
(Date.civil(2010,1,1)...Date.civil(2010,2,1)).each do |date|
date_counts[date]=0
end
date_counts.merge! Item.group("date(created_at)").count
Обновление
Вот некоторые результаты, когда я передаю свой диапазон дат и модель сюда, как ни странно, он получает хэши различной длины:
{Sun, 01 May 2011=>0, Mon, 02 May 2011=>0, Tue, 03 May 2011=>0, Wed, 04 May 2011=>0, Thu, 05 May 2011=>0, Fri, 06 May 2011=>0, Sat, 07 May 2011=>0, Sun, 08 May 2011=>0, Mon, 09 May 2011=>0, Tue, 10 May 2011=>0, Wed, 11 May 2011=>0, Thu, 31 Mar 2011=>2, Sun, 03 Apr 2011=>1, Fri, 08 Apr 2011=>643, Sat, 09 Apr 2011=>2360, Sun, 10 Apr 2011=>705, Mon, 11 Apr 2011=>34}
{Sun, 01 May 2011=>0, Mon, 02 May 2011=>0, Tue, 03 May 2011=>0, Wed, 04 May 2011=>0, Thu, 05 May 2011=>0, Fri, 06 May 2011=>0, Sat, 07 May 2011=>0, Sun, 08 May 2011=>0, Mon, 09 May 2011=>0, Tue, 10 May 2011=>0, Wed, 11 May 2011=>0, Sat, 02 Apr 2011=>1, Fri, 08 Apr 2011=>4158, Sat, 09 Apr 2011=>12206, Sun, 10 Apr 2011=>4279, Mon, 11 Apr 2011=>169}
{Sun, 01 May 2011=>0, Mon, 02 May 2011=>0, Tue, 03 May 2011=>0, Wed, 04 May 2011=>0, Thu, 05 May 2011=>0, Fri, 06 May 2011=>0, Sat, 07 May 2011=>0, Sun, 08 May 2011=>0, Mon, 09 May 2011=>0, Tue, 10 May 2011=>0, Wed, 11 May 2011=>0}
Не уверен, что вызвало это ... хм.