2011-01-12 6 views
3

Ich habe ein Modell mit vielen Attributen und habe eine Reihe von Seiten erstellt, um alle relevanten Daten zu sammeln. Auf der letzten Seite möchte ich dem Benutzer alle gesammelten Daten zeigen.Ruby on Rails: Sammlung von Attributen für ein Modell erhalten

Ich könnte diese Seite durch manuelle Eingabe aller Beschriftungen und Werte für jedes Attribut erstellen, aber ich erwarte, dass diese Art von lästigen und sich wiederholenden Aufgabe wurde bereits von jemandem gelöst, so dass in 3-4 Zeilen Code.

In diesem Stadium bin ich nur Prototyping, so dass dies nicht gut aussehen muss.

Hat jemand Vorschläge, wie schnell alle Attribute eines Modells auf dem Bildschirm gedruckt werden können?

Ich war so etwas wie dieses Denken:

Wenn @my_data_model ist die Instanz-Variable, von denen ich die Attribute ausdrucken möchten, dann:

<%= show_attributes @my_data_model %> 

würde die Attributwerte mit den Etiketten Ausgang .

Dank in der Erwartung.

Antwort

5

Ich tue das für eines meiner Projekte wie folgt aus:

Zuerst habe ich eine Reihe von Spalten definieren Ich will nicht wie die Zeitstempel Spalten:

<% @rejects = ["id", "created_at", "updated_at" %> 

Dann von dem Objekt I entferne diese Spalten;

<% @columns = Patient.column_names.reject { |c| @rejects.include?(c) } %> 

Dann iterieren ich den column_names durch und drucken Sie die eingegebenen Informationen:

<h2>Is the following information correct?</h2> 
<div class="checks"> 
    <h3>Patient details</h3> 
    <% @columns.each_with_index do |c, i| %> 
    <p id="p<%= i %>" class="check"> 
     <span class="title"><%= c %>:</span> 
     <span class="value"><%= @patient[i] %></span> 
     <span class="valid"> 
     <img src="../../images/icons/tick.png" alt="green tick"> 
     </span> 
    </p> 
    <% end %> 
</div> 

hoffe, das hilft!

+1

Sie können nur die beiden Arrays subtrahieren anstelle der Kombination "reject"/"include?", Die Sie verwenden. – Jeriko

+0

Ja, könnte das tun. Vielen Dank! –

1

Ich habe dies als generische Show-Ansicht für verwendet.

%h2= resource_class.model_name.human 

%table 
    - resource_class.column_names.each do |column_name| 
    %tr{ :class => (cycle "odd", "even") } 
     %td= resource_class.human_attribute_name(column_name) 
     - if resource[column_name].respond_to?(:strftime) 
     %td= l resource.send(column_name) 
     - else 
     %td= resource.send(column_name) 

Es resource_class gibt die aktuelle Modellklasse und resource die aktuelle Instanz davon.

0

Vielen Dank an alle,

ich eine Lösung bauen auf Ihre Empfehlungen wie diese Basis:

<% @rejects = ["_id", "created_at", "updated_at"] %> 
<% @columns = Agency.column_names - @rejects %> 
<% @columns.each_with_index do |c, i| %> 
    <p id="p<%= i %>" class="check"> 
     <span class="title"><%= c %>:</span> 
     <span class="value"><%= @agency.send(c) %></span> 
    </p> 
    <% end %> 

Mit <%= @patient[i] %> nicht für mich arbeiten, wahrscheinlich, weil ich Mongomapper als meine ORM bin verwenden.