Группа Rails по часам дня для столбца created_at

У меня есть Subscribe Model и я хочу сгруппировать по часам дня. Я проверил с помощью записей группы rails по датам created_at и rails - группировка по дням и часам Но не повезло! .

2.3.0 :175 > Subscribe.find 13
  Subscribe Load (0.9ms)  SELECT  "subscribes".* FROM "subscribes" WHERE "subscribes"."id" = $1 LIMIT 1  [["id", 13]]
 => #<Subscribe id: 13, user_id: 7, publisher_id: 5, created_at: "2015-11-23 00:37:49", updated_at: "2016-03-22 08:04:31", subscription_id: "2"> 

при применении другого решения

2.3.0 :174 > Subscribe.where("DATE_PART('hour', created_at) = ?", 13)
  Subscribe Load (1.0ms)  SELECT "subscribes".* FROM "subscribes" WHERE (DATE_PART('hour', created_at) = 13)
 => #<ActiveRecord::Relation []> 

Для этого я использовал groupdate

graph_data =  Subscribe.group_by_hour_of_day(:created_at, format: "%-l %M %P", time_zone: "Kolkata",range: start_date.to_datetime..end_date.to_datetime).count

 => {"12 00 am"=>0, "1 00 am"=>0, "2 00 am"=>0, "3 00 am"=>0, "4 00 am"=>0, "5 00 am"=>1, "6 00 am"=>1, "7 00 am"=>0, "8 00 am"=>0, "9 00 am"=>0, "10 00 am"=>0, "11 00 am"=>0, "12 00 pm"=>1, "1 00 pm"=>1, "2 00 pm"=>0, "3 00 pm"=>0, "4 00 pm"=>0, "5 00 pm"=>0, "6 00 pm"=>0, "7 00 pm"=>0, "8 00 pm"=>0, "9 00 pm"=>0, "10 00 pm"=>0, "11 00 pm"=>0} 

но для подписки 13 есть запись на created_at (2015-11-23 00:37:49), но она возвращается как 0

Любая помощь будет оценена!!!


person Gupta    schedule 23.03.2016    source источник


Ответы (2)


пытаться

Subscribe.all.group_by{ |s| s.created_at.hour }
person Oleg Sobchuk    schedule 23.03.2016

С Groupdate Gem произошла небольшая заминка. Чтобы это исправить, мне нужно преобразовать created_at в соответствующий time zone.

range: start_date.to_datetime.in_time_zone(time_zone)..end_date.to_datetime.in_time_zone(time_zone).end_of_day).count
person Gupta    schedule 01.04.2016