1

私はレールを使用していますが、私がやろうとしていることが html テーブルで可能かどうか疑問に思っています。多くのカテゴリを持つオブジェクトを繰り返し処理しています。各カテゴリには 1 つ以上の本があり、各本は「ページ」属性として含まれています。次のようなテーブルを作成したいと思います。

**category**     **book name**     **pages**
general            book1             15
                   book2             20
                   book3             40

これはテーブルの 1 行に対応すると思いますが、最後の 2 列には明らかに複数の行が含まれています。次のようなコードでこれを達成できました。

<table>
  <thead><th>category</th><th>book name</th><th>pages</th></thead>
  <tbody>
    <% category.each do |c| %>
    <tr>
      <td><%= c.name %></td>
      <td>
        <% c.books.each do |b| %>
          <%= b.name %><br />
        <% end %>
      </td>
      <td>
        <% c.books.each do |b| %>
          <%= b.pages %><br />
        <% end %>
      </td>
    </tr>
    <% end %>
  </tbody>
</table>

ご覧のとおり、c.books を 2 回繰り返していますが、これは面倒なようです。c.books を一度だけ繰り返しながらこれを行う方法はありますか? 提案があればぜひ聞きたいです。

4

1 に答える 1

1

表の個々の行に各本を配置してもかまわない場合は、最初の行の後のカテゴリ名を省略して、上記と同じ形式にすることができます。html.erb コードは次のとおりです。

<table>
  <thead><th>category</th><th>book name</th><th>pages</th></thead>
  <tbody>
    <% category.each do |c| %>
    <% first_row = true %>
    <% c.books.each do |b| %>
      <tr>
        <% if first_row == true %>
          <td> <%= c.name %> </td>
          <% first_row = false %>
        <% else %>
          <td></td>
        <% end %>
        <td> <%= b.name %> </td>
        <td> <%= b.pages %> </td>
      </tr>
    <% end %>
    <% end %>
  </tbody>
</table>

お役に立てれば!

于 2012-04-23T01:48:44.897 に答える