2009-06-30 4 views
7

will_paginate 플러그인을 통해 연속적인 페이지로 분할 된 사진이 있습니다. 사진을 열고 링크를 사용하여 모든 사진으로 돌아 가면 항상 첫 번째 페이지로 돌아갑니다 (예 : 5 페이지에 사진이 표시됨, 사진을 열고 모든 사진을 표시하는 링크를 클릭 한 후 5 쪽을 다시 클릭하십시오. 그러나 1쪽에 나와 있습니다).항목 페이지 및 will_paginate

이제 사진이 속한 페이지 번호를 가져 오는 방법이 있습니까?

GET 매개 변수를 전달하려고했지만 사용자가 더 이상 작업 (예 : 댓글 게시, 사진 수정, ecc)을 수행하지 않는 경우에만 작동합니다.

답변

8
page = (number_of_records_before_RECORD/number_of_records_per_page) + 1 

즉. 사진은 ID (40)을 가지고 있으며, 페이지 당 20 개 레코드 (일부 레코드가 삭제 된 가정) 전 (25 개) 기록이있는 경우 :

page = (25/20) + 1 = 2 

당신은 Model.count(:conditions => ['id < ?', record.id], :order => 'id')를 사용하여 선택한 레코드하기 전에 레코드 수를 셀 수 있습니다. 올바른 쿼리는 모든 개체를 나열 할 때 해당 테이블에 적용 할 정렬 필터에 따라 다릅니다.

+0

이것은 해결책 일 수 있지만이 코드가 플러그인에서 기본적으로 구현되지 않은 이유가 궁금합니다. 내가 성능면에서 말한 것을하는 것은 말이되지 않습니다. – collimarco

+0

Becau 큰 잠재 고객에게는 실제로 의미가 없습니다. 이것은 완벽한 해결책은 아니지만 특정 요구에 대한 해결 방법 일뿐입니다. 또한 will_paginate는 추가 ActiveRecord 기능이 아닌 페이지 매김 기능을 제공합니다. –

+1

엄청난 성과가 될 것이라고 나는 생각하지 못했습니다. 페이지 매김 라이브러리를 사용하는 경우 페이징하는 모든 것을 계산하여 총 페이지 수를 계산합니다.주문하는 열이 올바르게 색인 된 경우 현재 페이지를 찾기 위해 비슷한 수를 얻는 것이 너무 힘들지 않아야합니다. – Shadwell

0

페이지 번호는 검색 결과에 따라 크게 달라집니다. 검색 결과 세트 및 페이지 당 항목 수에 따라 1, 10 또는 100 페이지가 검색 될 수 있습니다.

"모든 사진 표시"링크는 설명 된대로 GET 매개 변수를 사용하여 검색 및 페이지 매김 정보를 포함 할 수 있습니다. 또는 쿠키를 통해 저장 및 검색하여 사용자가 새 검색을 지우거나 선택할 때까지 검색 결과가 유지되도록합니다.

+0

문제는 사용자가 임시로 사진 페이지를 떠나 (예를 들어 사진 페이지를 수정) 모든 사진을 표시하기 위해 되돌아 가려고 할 때 항상 첫 페이지로 돌아 오는 것입니다. ( 쿠키는 SEO에 대한 좋은 일입니다. – collimarco

+1

@collimarco 요청간에 검색 및 페이지 매김 매개 변수를 재사용하려면 쿠키를 사용하는 것이 좋습니다. –

+0

많은 사진 사이트 (예 : deviantart.com)가 쿠키를 사용하여 사용자가 돌아갈 수있는 것을 보았습니다. – collimarco

0

다른 해결책이 있습니다. will_paginate는 'query_field'및 'page'쿼리 문자열 매개 변수를 사용합니다. 당신은 Rails params 해쉬로부터 이것을 추출 할 수 있습니다. 세션 상태를 사용하는 세션을 추적하면 필요할 때 컨트롤러 코드에 다시 적용 할 수 있습니다.

정확하게 관리하는 방법은 애플리케이션에 따라 다릅니다. 작업중인 앱에서 일반적인 흐름과 구성원 컨텍스트를 구별 할 수있는 흐름이 있습니다. 사용자는 멤버 # 인덱스 페이지에서 멤버 컨텍스트를 입력합니다. 그래서 나는 멤버 context에 대한 entry에 session [: member_context]를 설정했다. 예 : in members # edit. 그런 다음 members # index에 다음 코드가 있습니다.

if session[:member_context] 
    @search_field = session[:search_field] 
    @page = session[:page] 
    # toggle out of member context 
    session[:member_context] = nil 
else 
    @search_field = params[:search_field] 
    @page = params[:page] 
    # record lastest search in case the user subsequently enters the member context 
    session[:search_field] = @search_field 
    session[:page] = @page 
end 
@members = Member.where(<use @search_field>).page(@page) 
# and render ... 

이 정보는 내 응용 프로그램에서 훌륭하게 작동합니다.