2009-04-23 8 views
2

Ich habe eine Sammlung von Datensätzen in meiner Datenbank, die ich ausdrucken möchte, um Tabellen basierend auf dem Datensatzdatum zu trennen.Rails: Erstellen von Tabellen basierend auf Gruppen von verwandten Datenbanksätzen

So habe ich bereits die folgenden (in 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 

Im Moment es alle meine Aufzeichnungen in der gleichen Tabelle anzeigt. record.recorded_on enthält das Datum für meine Aufzeichnungen. Ich möchte für jeden Tag, der alle Datensätze für diesen Tag enthält, separate Tabellen wie die obige generieren.

Wie würde ich das tun?

Antwort

3

recorded_on Unter der Annahme ist ein Datum, und kein Datetime:

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

Wenn es ein Datetime ist:

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

Jetzt @records enthält einige verschachtelte Arrays. Kleben Sie Ihren Tisch haml oben in einem Teil namens _record_table.html.haml. Stellen Sie sicher, dass Sie @records in eine lokale Variable records ändern, so dass es für jeden partiellen Rendervorgang ausgelagert werden kann.

Jetzt ist Ihre haml Vorlage sieht wie folgt aus:

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

Dank - genau das, was ich brauchte. Aus Neugier, was bedeutet das "&:" in @records = Record.all.group_by (&: recorded_on)? – neezer

+1

&: ist etwas namens Symbol # to_proc, es ist eine Möglichkeit, Aufrufe von Methoden mit Blöcken abzukürzen. So hat group_by (&: recorded_on) den gleichen Effekt wie: group_by {| record | record.recorded_on} –

+0

Max ist richtig. Im zweiten Beispiel, das ich dort aufstellte, musste ich die Longhand verwenden, weil ich das Ergebnis zusätzlich etwas verarbeiten wollte, was die Kurzversion nicht unterstützt. –

Verwandte Themen