如何处理Pundit的分页?

时间:2014-04-02 12:24:37

标签: ruby-on-rails ruby-on-rails-4 pundit

我刚开始在Rails 4应用程序中使用Pundit gem进行授权。

一切都很顺利,但我可以了解分页在索引行动中的作用。

我的控制器的索引操作如下:

def index
   @records = policy_scope(Record)
end

我的RecordPolicy中的Scope类接着:

 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类进行子类化,我不知道如何做到这一点。

2 个答案:

答案 0 :(得分:3)

policy_scope(Record)方法会返回ActiveRecord::Relation个对象,然后您可以链接分页方法,具体取决于您使用的是哪个宝石(will_paginatekaminari)。

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

答案 1 :(得分:1)

对于googlers。上面的答案在技术上是正确的,但是对于最新版本的Kaminari(我的是0.17),链的方法是page(params[:page])