2011-01-12 44 views
3

我有一個模型有很多屬性,並且構建了一系列頁面來收集所有相關數據。在最後一頁中,我想向用戶顯示所有收集的數據。Ruby on Rails:獲取模型屬性的集合

我可以通過手動輸入每個屬性的所有標籤和值來創建此頁面,但我期望這種繁瑣且重複性的任務已經由某人解決,以至於在3-4行代碼中。

在這個階段,我只是原型設計,所以這不需要看起來不錯。

任何人有任何建議,如何快速打印在屏幕上模型的所有屬性?

我的想法是這樣的:

如果@my_data_model是實例變量,而我要打印的屬性,那麼:

<%= show_attributes @my_data_model %> 

會與它們的標籤輸出屬性值。

感謝您的期待。

回答

5

我這樣做,像這樣我的項目之一:

首先,我定義列的一個陣列,我不希望像時間戳列:

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

然後從對象我刪除那些列;

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

然後,我通過迭代COLUMN_NAMES並打印出輸入的信息:

<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> 

希望這有助於!

+1

你可以減去兩個數組,而不是你正在使用的`reject` /`include?`組合。 – Jeriko 2011-01-12 07:41:29

1

我一直在使用它作爲inheritated_resources gem的通用展示視圖。

%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) 

resource_class返回當前模型類和resource它的當前實例。

0

謝謝大家,

我建立一個基於你的建議,這樣一個解決方案:

<% @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 %> 

使用<%= @patient[i] %>沒有工作對我來說,可能是因爲我使用Mongomapper我的ORM。