【问题标题】:Ruby on Rails: get collection of attributes for a modelRuby on Rails:获取模型的属性集合
【发布时间】:2011-01-12 05:17:07
【问题描述】:

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

我可以通过手动键入每个属性的所有标签和值来创建此页面,但我希望这种乏味和重复性的任务已经有人解决了,因此只需 3-4 行代码。

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

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

我在想这样的事情:

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

<%= show_attributes @my_data_model %>

将输出带有标签的属性值。

感谢期待。

【问题讨论】:

    标签: ruby-on-rails model helpers


    【解决方案1】:

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

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

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

    希望这会有所帮助!

    【讨论】:

    • 您可以只减去两个数组,而不是您正在使用的 reject/include? 组合。
    • 是的,可以做到。谢谢!
    【解决方案2】:

    我一直将其用作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 返回它的当前实例。

    【讨论】:

      【解决方案3】:

      谢谢大家,

      我根据您的建议构建了一个解决方案,如下所示:

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

      使用 &lt;%= @patient[i] %&gt; 对我不起作用,可能是因为我使用 Mongomapper 作为我的 ORM。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-09
        • 1970-01-01
        • 2011-09-22
        • 1970-01-01
        相关资源
        最近更新 更多