【问题标题】:How to handle pagination with Pundit?如何使用 Pundit 处理分页?
【发布时间】:2014-04-02 12:24:37
【问题描述】:

我刚刚开始在 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 类的情况下执行此操作。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 我在使用 ActiveRecord 'find' 而不是 'where' 过滤我的 @records 等效项时遇到问题,因此只返回一个不是 ActiveRecord 关系类型的记录。一旦我解决了我的专家范围内的错误,上面的解决方案就可以正常工作了。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2013-07-14
      • 1970-01-01
      • 2021-12-07
      • 1970-01-01
      • 2015-03-18
      • 2016-08-29
      • 2014-02-21
      • 2021-10-06
      • 1970-01-01
      相关资源
      最近更新 更多