我刚刚开始在Rails4应用程序中使用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类进行子类化的情况下做到这一点。
发布于 2014-08-31 23:07:57
policy_scope(Record)方法返回一个ActiveRecord::Relation对象,然后您可以根据使用的gem (will_paginate、kaminari)链接分页方法。
def index
@records = policy_scope(Record).paginate(params[:page])
end发布于 2017-01-30 18:25:28
为谷歌员工准备的。上面的答案在技术上是正确的,但是对于最新版本的Kaminari (我的是0.17),链的方法是page(params[:page])
https://stackoverflow.com/questions/22811409
复制相似问题