【问题标题】:Dynamic table view construction动态表视图构建
【发布时间】:2011-11-16 02:32:44
【问题描述】:

这是一个 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

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

【问题讨论】:

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


    【解决方案1】:

    您在@header_values 中拥有所有标题值,因此您可以使用它来驱动显示器,而不是使用每辆火车来驱动自己的显示器;像这样:

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

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

    【讨论】:

    • 调整原始问题,我无法匹配'_',因为记录长度是可变的
    • @sysconfig:我不明白你的评论。 @header_values 中有所有可能的列,因此您对其进行迭代,如果特定火车具有该属性,则使用 t[k],如果没有,则使用 '-'
    猜你喜欢
    • 1970-01-01
    • 2012-02-03
    • 2013-07-06
    • 2018-07-07
    • 1970-01-01
    • 1970-01-01
    • 2019-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多