我刚开始在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类进行子类化,我不知道如何做到这一点。
答案 0 :(得分:3)
policy_scope(Record)
方法会返回ActiveRecord::Relation
个对象,然后您可以链接分页方法,具体取决于您使用的是哪个宝石(will_paginate
,kaminari
)。
def index
@records = policy_scope(Record).paginate(params[:page])
end
答案 1 :(得分:1)
对于googlers。上面的答案在技术上是正确的,但是对于最新版本的Kaminari(我的是0.17),链的方法是page(params[:page])