Как группировать по дням с Ruport / Ruby on Rails? - PullRequest
1 голос
/ 15 сентября 2009

Я пытаюсь оценить Ruport для использования в моем приложении на Rails, но не уверен, как взять серию записей с метками даты / времени и сгруппировать их с помощью функций группировки Ruport.

Я открыт для других / лучших методов, чтобы сделать ту же группировку, если Ruport не имеет смысла.

Ответы [ 3 ]

6 голосов
/ 15 сентября 2009

без рупорта:

<% @posts.group_by {|p| p.created_at.at_beginning_of_day }.each do |day, posts| %>
  <h2><%= day.strftime("something...") %></h2>

  <% posts.each do |post| %>
    do stuff with `post`.
  <% end %>
<% end %>

Используйте at_beginning_of_month, at_beginning_of_week и т. Д., В зависимости от того, по чему вы хотите группировать.

2 голосов
/ 16 июня 2011

Ruport включает метод добавления нового столбца в таблицу. Таким образом, группировка с указанием даты из источника отметки времени может быть выполнена следующим образом:

@table.add_column('created_at_date') { |r| r.created_at.to_date }
created_at_date_grouping = Grouping(@table, :by => "created_at_date")

Этот метод, конечно, также может быть использован для создания более интересных отчетов, как в Google Analytics:

@table.add_column('day_of_week') { |r| r.created_at.strftime('%a') }
@table.add_column('hour_of_day') { |r| r.created_at.strftime('%H') }

Не знаю, как насчет производительности.

1 голос
/ 16 сентября 2009

Я бы предложил переместить функцию @ posts.group_by в контроллер, а не в представление.

...