2011-11-20 2 views
1

페이지 매김에 큰 문제가 있습니다. 나는 때로는 상위 20레일 3, 기존의 제한된 활성 레코드 결과를 보냅니다.

.limit(20) 

지금 내가 페이지를 매기 할 수 있도록하려는 갖고 싶어 내 컨트롤러에서

scope :published_and_valid, joins(...).where(...) 

:

나는 내 모델에서 범위로 정의 쿼리를 20이 넘는 결과 (페이지 당 5)

는 그리고 나는이 작업을 수행하려고 :

@articles = Article.published_and_valid.limit(20).paginate(:page => params[:page]) 

이 내 시야에 결과대로 작동하지 않습니다 그것은 페이징을하기 위해 당신의 관계에 대한 자신의 limit 절을 부과 will_paginate처럼 보이는 모든 기사

+0

어떤 버전의 will_paginate를 설치하셨습니까? (의심 스럽다면'Gemfile.lock'을 확인하십시오.) –

+0

버전은 3.0.2입니다. – hereandnow78

답변

7

에 대한 pagineted 결과이다. 몇 가지 실험을 한 후 가장 쉬운 방법은 결과 집합을 열심히로드하고 the array extensions에 포함 된 기능을 사용하여 실제 페이지 매김을 수행하는 것입니다.

다음은 간단한 예입니다. 참고 사항 : will_paginate/array; 이니셜 라이저 또는 다른 곳에서이 작업을 수행 할 수 있습니다. paginate 방법을 사용하려면 원숭이 패치 Array을 수행합니다.

require 'will_paginate/array' 

class ArticlesController < ApplicationController 
    def index 
    @articles = Article.published.limit(20).all # call `all` to eager load 
    @articles = @articles.paginate(:page => params[:page], :per_page => 10) 
    end 
end 

[업데이트]

또 다른 옵션은 total_entires 옵션을 전달하는 결과 집합의 크기에 따라 will_paginate한다.

class ArticlesController < ApplicationController 
    def index 
    @articles = Article.published.limit(20) 
    @articles = @articles.paginate(:page => params[:page], :per_page => 10, :total_entries => @articles.count) 
    end 
end 

전체 20 개의 결과가 반환된다고 보장 할 수는 없으므로 20을 전달할 수 없습니다. count 속성을 전달하면 페이지 매김이 올바른지 확인할 수 있습니다.

+0

ty brandon은 매력처럼 작동합니다. – hereandnow78

관련 문제