문제

will_paginate 플러그인을 통해 연속 페이지에서 분할 된 사진이 있습니다. 사진을 열고 링크를 사용하여 모든 사진으로 돌아 오면 항상 첫 페이지로 돌아갑니다 (예 : 사진이 5 페이지에 표시되면 사진을 열고 링크를 클릭하여 모든 사진을 보여주고 켜져있을 것으로 예상합니다. 다시 5 페이지, 그러나 당신은 1 페이지에 있습니다).

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

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

도움이 되었습니까?

해결책

page = (number_of_records_before_RECORD / number_of_records_per_page) + 1

다시 말해. 사진이 40 개가 있고 이전에 25 개의 레코드가있는 경우 (일부 레코드가 삭제되었다고 가정) 페이지 당 20 개의 레코드가 있습니다.

page = (25 / 20) + 1 = 2

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

다른 팁

페이지 번호는 검색 결과에 크게 의존합니다. 결과 세트와 페이지 당 항목 수에 따라 검색에 1, 10 또는 100 페이지가있을 수 있습니다.

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

또 다른 해결책은 다음과 같습니다. Will_Paginate는 쿼리 문자열 매개 변수 'Search_field'및 'Page'를 사용합니다. Rails Params Hash에서이를 추출 할 수 있습니다. 세션 상태를 사용하는 사람들을 추적하면 필요할 때 컨트롤러 코드에 다시 적용 할 수 있습니다.

정확히 관리하는 방법은 응용 프로그램에 따라 다릅니다. 내가 작업하고있는 앱에서 흐름은 일반적인 맥락과 멤버 컨텍스트를 구별 할 수있는 것입니다. 사용자는 멤버#색인 페이지에서 멤버 컨텍스트를 입력합니다. 그래서 방금 회원 컨텍스트 입력시 세션 [: member_context]을 설정했습니다. 멤버#편집에서 예를 들어. 그런 다음 멤버#색인에는 다음 코드가 있습니다.

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 ...

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top