Rails группирует ActiveRecord по времени, но дополняет даты значениями nil? - PullRequest
3 голосов
/ 12 апреля 2011

Поэтому я использую activerecord, чтобы получить количество элементов за определенный день:

Item.group("date(created_at)").count.values

Но это не дает мне 0, если в данный день нет записей, как я могу это исправить? Или есть еще "Rails" способ сделать что-то подобное?

Любая помощь очень ценится, еще раз спасибо!

1 Ответ

3 голосов
/ 12 апреля 2011

Используя запрос 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}

Не уверен, что вызвало это ... хм.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...