1

我正在使用 rails,我想知道我正在尝试做的事情是否可以使用 html 表。我正在迭代一个具有许多类别的对象。每个类别都有一本或多本书籍,每本书都作为“页面”属性。我想创建一个如下所示的表:

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

我相信这将对应于表中的一行,但最后两列显然有多行。我已经能够使用如下代码完成此操作:

<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 上迭代了两次,这看起来很乱。有没有办法在只迭代一次 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 回答