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>

ネストされた 2 つのループを使用して、各エリアとその中に含まれる場所を簡単に反復できますが、td と tr がテーブルで機能する方法のため、各エリアの場所を 1 つの列に反復する方法がわかりません。

私はテーブルの頭を下げたと思います:

          <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 に答える