2009-04-23 2 views
2

У меня есть коллекция записей в моей базе данных, которые я хочу распечатать для разделения таблиц на основе даты записи.Rails: Создание таблиц на основе групп связанных записей базы данных

Так у меня уже есть следующее (в Haml, FYI):

%table 
    %tr 
    %th Name 
    %th Type 
    %th Total Hits 
    - for record in @records 
    %tr{ :class => cycle('odd','even') } 
     %td= record.name 
     %td= record.target_type 
     %td= record.outbound + record.detail + record.custom + record.dynamic 

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

Как мне это сделать?

ответ

3

Предполагая recorded_on является датой, а не DateTime:

@records = Record.all.group_by(&:recorded_on) 

Если это DateTime:

@records = Record.all.group_by { |record| record.recorded_on.to_date } 

Теперь @records содержит несколько вложенных массивов. Прикрепите стол haml выше в частичном названии _record_table.html.haml. Обязательно измените @records на локальную переменную records, чтобы ее можно было поменять для каждого частичного рендеринга.

Теперь ваш шаблон Haml выглядит следующим образом:

- @records.each do |records_for_one_day| 
    = render :partial => 'render_table', :locals => { :records => records_for_one_day } 
+0

Спасибо - именно то, что мне было нужно. Из любопытства, однако, что означает «&:» в @records = Record.all.group_by (&: registered_on)? – neezer

+1

&: что-то называется Symbol # to_proc, это способ сокращения вызовов методам с блоками. Итак, group_by (&: registered_on) имеет тот же эффект, что и: group_by {| record | record.recorded_on} –

+0

Макс прав. Во втором примере, который я установил там, мне пришлось использовать longhand, потому что я хотел бы немного обработать результат, к которому сокращенная версия не поддерживает. –

Смежные вопросы