Группировка по неделям/месяцам/etc & ActiveRecord?

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

Есть ли способ с 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...}

или есть лучший способ?

спасибо! Орен

Ответ 1

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

@user.all.group_by{ |u| u.created_at.beginning_of_month }

Ответ 3

Вот более утонченная версия этого

@user.comments.group("year(created_at)").group("month(created_at)").count

Ответ 4

Мое предположение будет примерно таким:

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

Сухой код, ymmv

Ответ 5

Используйте group_by

@user.comments.group_by(&:week)

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

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

Ответ 6

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

Ответ 7

Отметьте графу даты группы

https://github.com/ankane/groupdate

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