Ruby on Rails:获取模型的属性集合

时间:2011-01-12 05:17:08

标签: ruby-on-rails model helpers

我有一个具有很多属性的模型,并构建了一系列页面来收集所有相关数据。在最后一页中,我想向用户显示所有收集的数据。

我可以通过手动输入每个属性的所有标签和值来创建此页面,但我希望这种繁琐且重复的任务已经被某人解决,以便在3-4行代码中。

在这个阶段我只是原型设计所以这不需要看起来很好。

有人建议如何在屏幕上快速打印模特的所有属性吗?

我在想这样的事情:

如果 @my_data_model 是我想要打印属性的实例变量,那么:

<%= show_attributes @my_data_model %>

将使用其标签输出属性值。

感谢您的期待。

3 个答案:

答案 0 :(得分: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 :(得分: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返回当前模型类。

答案 2 :(得分: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。