2014-04-02 3 views
2

레일즈 4 앱에서 Pundit gem을 사용하기 시작했습니다.Pundit에서 페이지 매김을 처리하는 방법은 무엇입니까?

모든 것이 잘되었지만 색인 작업에서 페이지 매김이 작동하는 방법에 대해 머리 글자를 얻을 수 있습니다.

def index 
    @records = policy_scope(Record) 
end 

내 RecordPolicy 내의 범위 클래스는 다음 간다 : 같은

내 컨트롤러의 index 액션 보인다

class Scope < Struct.new(:user, :scope) 
    def resolve 
     if user.has_role? :admin 
     # get all records 
     else 
     # get user specific records 
     end 
    end 
    end 

이 모두 잘 작동합니다. 그래도 페이지 매김을 처리하는 방법을 알고 싶습니다. 물론 이것은 페이지 매개 변수 등을 전달하는 것과 관련이 있으며 Scope 클래스를 subsclassing하지 않고이 작업을 수행하는 방법을 잘 모르겠습니다.

답변

3

policy_scope(Record) 방법은 당신이 (will_paginate, kaminari)을 사용하는 보석에 따라 매김 방법을 체인 수 ActiveRecord::Relation 개체를 반환합니다.

def index 
    @records = policy_scope(Record).paginate(params[:page]) 
end 
+0

입니다.이 경우에는 @records를 ActiveRecord 'find'대신에 'find'를 사용하여 필터링하는 문제가있었습니다. 'where'는 ActiveRecord 관계 유형이 아닌 하나의 레코드 만 반환했습니다. 위의 솔루션은 색인에 대한 내 학자 범위의 버그를 해결하면 올바르게 작동합니다. –

1

googlers의 경우. 위의 대답은 기술적으로 정확하지만, Kaminari의 가장 최신 버전 (내 0.17)에서 체인 연결 방법은 page(params[:page])

관련 문제