2011-01-12 96 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。