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

4

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

我可以手动输入每个属性的标签和值来创建此页面,但我预计这种繁琐重复的任务已经被某人解决了,只需要3-4行代码。

目前我只是原型设计阶段,所以不需要看起来很好。

有没有人有关于如何快速在屏幕上打印出模型的所有属性的建议?

我想的是这样:

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

<%= show_attributes @my_data_model %>

会输出带标签的属性值。感谢您的期待。
3个回答

6

我正在为我的一个项目这样做:

首先,我定义了一个不想要的列(如时间戳列)的数组:

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

然后我从对象中删除那些列;

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

然后我遍历列名并打印出输入的信息:
<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
好的,可以这么做。谢谢! - Syed Aslam

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。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接