2013-05-29 2 views
0

Ruby on Rails 3.1 앱을 사용하는 클라이언트에 대해 인쇄 가능한 테이블을 만들고 각 페이지에서 테이블 헤더를 반복해야합니다. 아쉽게도 현재 WebKit browsers은 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 %> 

가 어떻게 설정 페이지와 각 하나를 통해 단계 않는 현재보기 코드? 즉, 하나의보기 페이지에서 페이지 매김의 모든 페이지를 얻으려면 어떻게해야합니까?

또는 내가 추구해야하는 더 나은 방법이 있습니까?

답변

0

여기서 Enumerable#each_slice을 사용하는 것이 더 나을 것 같습니다. 이 도구를 사용하면 커다란 개체를 일련의 작은 조각으로 분할 한 다음 해당 조각을 반복 할 수 있습니다. 이런 종류의 작업에는 매우 유용합니다. 루프에 추가 연산을 할 필요가 없으며 보석이 필요하지 않습니다. 여기

한 페이지에 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 %> 

이 방법에만 작동합니다 (그래서 당신은 끝나지 않는다 up 또는 over 페이지 화), will_paginate에서도 문제가 될 수 있습니다.

+0

감사합니다. '.each_slice'는 지금까지 존재하지 않았다. 내가 어떻게 돌아갈 지 모르는 문제는 activerecord 연관을 제거하는 객체를'.each_slice' 할 때이다. 명확히하기 위해 각 테이블에 n 개의 (예 : 10) 장/행을 갖기를 원하므로'<% book.chapters.each_slice do | chap | %>' – JHo

+0

그럴 경우 카운터를 증가시키고 모든 행을 모듈로 확인해야 할 수 있습니다. 좀 더 세련된 해결책이있을 수 있지만 그럴 지 모르겠습니다. – XanderStrike

+0

감사 XanderStrike. 모듈 방식을 사용했는데 정상적으로 작동하지만 꽤 그렇습니다. – JHo