Группировка по неделям / месяцам / etc & ActiveRecord? - PullRequest
34 голосов
/ 24 мая 2009

Я делаю некоторые расчеты статики в моем продукте. Пользователь выполнил ряд операций, скажем, опубликованных комментариев. Я хочу показать им, сколько комментариев они опубликовали за неделю за последний месяц или за месяц за прошедший год.

Есть ли способ с activerecord группировать таким образом? Лучше всего мне просто сделать это вручную - перебирать суммы записей по моим собственным критериям?

class User < ActiveRecord::Base
  has_many :comments
end

class Comments < ActiveRecord::Base
  belongs_to :user
end

@user.comments(:all).map {|c| ...do my calculations here...}

или есть какой-нибудь лучший способ?

спасибо! Oren

Ответы [ 7 ]

79 голосов
/ 21 сентября 2012

В Postgres вы можете сделать:

@user.comments.group("DATE_TRUNC('month', created_at)").count

чтобы получить:

{"2012-08-01 00:00:00"=>152, "2012-07-01 00:00:00"=>57, "2012-09-01 00:00:00"=>132}

Принимает значения от "микросекунд" до "тысячелетия" для группировки: http://www.postgresql.org/docs/8.1/static/functions-datetime.html#FUNCTIONS-DATETIME-TRUNC

30 голосов
/ 12 января 2010

В этом случае лучшим решением для меня было либо сделать это в прямом SQL, либо использовать функцию Ruby group_by:

@user.all.group_by{ |u| u.created_at.beginning_of_month }
20 голосов
/ 28 мая 2014

Вот более изысканная версия этой

@user.comments.group("year(created_at)").group("month(created_at)").count
13 голосов
/ 24 мая 2009

Я думаю, что-то вроде:

@user.comments.count(:group => "year(created_at),month(created_at)")

Сухой код, мммм

4 голосов
/ 05 сентября 2014

Использовать group_by

@user.comments.group_by(&:week)

class User < ActiveRecord::Base
  def week
    some_attribute_like_date.strftime('%Y-%W')
  end
end

Это даст вам сгруппированный список в формате YYYY-WW

2 голосов
/ 05 февраля 2015

посмотреть дату группы

https://github.com/ankane/groupdate

он имеет последние коммиты, работает с postgresql, легко интегрируется с пиктограммами для быстрого построения графиков и работает с часовыми поясами !!

2 голосов
/ 24 мая 2009

Проверьте плагин has_activity.

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