动态表视图构造

时间:2011-11-16 02:32:44

标签: ruby-on-rails ruby ruby-on-rails-3 mongodb ruby-on-rails-3.1

这是一个rails 3.1应用程序,我对Ruby有点像菜鸟 我相信有更好的方法可以做到这一点。

我有一个带有可变长度记录的mongoDB,因此数据可能如下所示:

     name | type | age  | foo | bis  | boz 
     ------------------------------------------------
a    data |  -   | data |  -  | data | - 
b     -   | data |  -   |  -  | data | data
c     -   |  -   |  -   | data|  -   | _

其中“ - ”没有值。

数据如下:

[_id: "a", name: "data", age: "data", bis: "data"]
[_id: "b", type: "data", bis: "data", boz: "data"]
[_id: "c", foo:  "data"]

我想在我的视图中的表格中显示这些数据 我可以获得所有(可能的)表头的数组 用这样的东西:

@trains = Train.page(params[:page] || 1).per(50)
@a = []
@header_array = @trains.each {|train| @a.push(train.attributes.keys)}
@header_values = @a.uniq.to_a

但是如何通过数据循环来构建每个记录的数据行并确保它们排列在表头的正确列中?也许有更好的方法来生成整个表格。 我也不知道每条记录的属性是什么,所以给定结果集,每次都会动态构建表头

1 个答案:

答案 0 :(得分:0)

您拥有@header_values中的所有标题值,因此您可以使用该标题来驱动显示,而不是使用每个列车来驱动自己的显示;像这样的东西:

<% @trains.each do |t| %>
    <tr>
        <% @header_values.each do |k| %>
            <td><%= t[k] || '-' %></td>
        <% end %>
    </tr>
<% end %>

您可能需要调整t[k] || '-'以匹配您的数据,并可能根据k格式化值。您也可能希望以某种特定方式订购@header_values以产生合理的输出。