Динамическое построение табличного представления - PullRequest
0 голосов
/ 16 ноября 2011

Это приложение 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 голосов
/ 16 ноября 2011

У вас есть все значения заголовка в @header_values, так что вы можете управлять дисплеем, используя его вместо использования каждого поезда для управления своим собственным дисплеем;что-то вроде этого:

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

Возможно, вам придется настроить t[k] || '-' в соответствии с вашими данными и, возможно, отформатировать значение в зависимости от k.Вы также можете заказать @header_values каким-то конкретным способом, чтобы получить ощутимый результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...