0

Ruby on Rails 3.1 アプリを使用してクライアント用に印刷可能なテーブルをいくつか作成しており、各ページでテーブル ヘッダーを繰り返す必要があります。残念ながら、現時点では、WebKit ブラウザーは CSS ベースのソリューションをサポートしていません。

この問題を解決するには、will_paginate gem を使用することにしました。

コントローラ

def
  @books = current_library.books.order('books.title ASC')
end

現在のビュー コード

<% @books.each do |b| %>
<table>
  <thead><th><%= b.title %></th></thead>
  <tbody>  
  <% b.chapters.each do |chap| %
      <td><%= chap.number %> ... <%= chap.name %></td>
  <% end %>
  </tbody>
</table>
<% end %>

どのようにページをセットアップし、各ページをステップスルーするのですか? つまり、ページネーションのすべてのページを 1 つのビュー ページに収めるにはどうすればよいでしょうか。

または、私が追求すべきより良いアプローチはありますか?

4

1 に答える 1

0

ここを利用したほうがいいかもしれませんEnumerable#each_slice。大きな列挙可能なオブジェクトを一連の小さなスライスに分割し、それらのスライスを反復処理できます。この種のことには非常に優れており、ループで余分な計算を必要とせず、gem も必要ありません。

ページに 10 個のアイテムがあるコレクションの例を次に示します。

<% @books.each_slice(10) do |slice| %>
  <h1>Header Information</h1>
  <h2>Awesome</h2>

  <% slice.each do |book| %>
    <table>
      <thead><tr><th><%= book.title %></th></tr></thead>
      <tbody>  
      <% book.chapters.each do |chap| %
          <tr><td><%= chap.number %> ... <%= chap.name %></td></tr>
      <% end %>
      </tbody>
    </table>
  <% end %>

  <p>Some footer information</p>
<% end %>

このアプローチは、各書籍レコードがほぼ同じ量のスペースを必要とする場合にのみ機能します (そのため、ページが大きすぎたり小さすぎたりすることはありません)。しかし、それは will_paginate でも問題になります。

于 2013-05-29T20:36:06.013 に答える