2014-04-02 69 views
2

我剛剛開始在Rails 4應用程序中使用Pundit gem進行授權。如何處理專家的分頁?

一切都很好,但我可以讓我的腦海中分頁索引操作如何工作。

我控制器的index動作的樣子:

def index 
    @records = policy_scope(Record) 
end 

我RecordPolicy內的範圍類,則雲:

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類的子類。

回答

3

policy_scope(Record)方法返回一個ActiveRecord::Relation對象,則可以鏈分頁方法,根據所使用(will_paginatekaminari),該寶石。

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

我遇到了問題,我使用ActiveRecord'find'過濾了我的@records等價物,而不是'where'只返回一個不是ActiveRecord關係類型的記錄。上述解決方案工作正常後,我解決了索引上我的權威範圍中的錯誤。 –

1

對於googlers。上面的答案在技術上是正確的,但對於最新版本的Kaminari(我的是0.17),鏈接的方法是page(params[:page])