1

我的 Sinatra 应用程序中有以下 SQLite 表:

+----------------------------------+
| location             area        |
+----------------------------------+
| Maine                 1          |
| Syracuse              2          |
| Northport             3          |
| NYC                   4          |
| Coatesville           4          |
| Erie                  4          |
| Dayton                5          |
| Chicago               6          |
| Dallas                6          |
+----------------------------------+

我想根据这些数据创建一个 HTML 表,如下所示:

            <table>
              <thead>
                <tr>
                <th>Area 1</th>
                <th>Area 2</th>
                <th>Area 3</th>
                <th>Area 4</th>
                <th>Area 5</th>
                <th>Area 6</th>                    
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td>Maine</td>
                  <td>Syracuse</td>
                  <td>NorthPort</td>
                  <td>NYC</td>
                  <td>Dayton</td>
                  <td>Chicago</td>
                </tr>
                <tr>
                  <td></td>
                  <td></td>
                  <td></td>
                  <td>Coatesville</td>
                  <td></td>
                  <td>Dallas</td>
                </tr>
                <tr>
                  <td></td>
                  <td></td>
                  <td></td>
                  <td>Erie</td>
                  <td></td>
                  <td></td> 
                </tr>
              </tbody>
            </table>

我可以使用两个嵌套循环轻松遍历每个区域和其中包含的位置,但是由于 td 和 tr 在表中的工作方式,我不确定如何将每个区域的位置迭代到单个列中

我想我已经把桌子低着头了:

          <thead>
            <tr>
          <% @table_areas.each do |x| %>
            <th><%= x.area %></th>
            <% end %>
            </tr>
          </thead>

但我似乎无法弄清楚其余的。每个区域内的区域和位置会经常变化,所以我需要动态创建它。

4

1 回答 1

1

这是我的做法:

<% tas = @table_areas.group_by(&:area) %>
<% counter = tas.values.map(&:length).max %>

<table>
  <thead>
    <tr>
      <% tas.keys.each do |x| %>
        <th><%= 'Area ' + x.to_s %></th>
      <% end %>
    </tr>
  </thead>
  <tbody>
    <% (0...counter).each do |i| %>
      <tr>
        <% tas.values.each do |x| %>
          <td><%= x[i] && x[i].location %></td>
        <% end %>
      </tr>
    <% end %>
  </tbody>
</table>

to_i如果区域编号作为字符串存储在数据库中,您可能需要进行一些操作

于 2013-08-05T16:10:59.790 回答