【问题标题】:How to do pagination with cancan?如何用cancan进行分页?
【发布时间】:2011-08-23 03:49:28
【问题描述】:

我希望使用 cancan 进行分页,但是如何将其与 gems (如 will_paginate)集成并不明显。

理想情况下,cancan 的 load_resource 将委托给 will_paginate 并添加额外的条件。例如在 cancan 中,我声明了访客用户

can :read, Post, :published => true

这由 load_resource 自动处理。但是,我希望通过所有这些结果获得 will_paginate 页面。

任何想法。

问候

布拉德

【问题讨论】:

    标签: ruby-on-rails pagination cancan


    【解决方案1】:

    使用 kaminari https://github.com/amatsuda/kaminari 很简单

    在我的 PostsController 中我只是这样做

      before_filter :load_by_pagination, :only => :index
      def load_by_pagination
        @posts = Post.accessible_by(current_ability).order("published_date desc").page params[:page]
      end 
    

    请注意,kaminari 可以与新的 rails3 ActiveRelation 框架一起正常工作,因此 可以将方法链接在一起以建立范围。和 CanCan 一样 ActiveRelation 友好,它们只是链接在一起。

    【讨论】:

      【解决方案2】:

      你也可以这样做:

      class PostsController 
      
        def index
          @posts = @posts.page(params[:page])     
        ...
      

      【讨论】:

      • 是的,但是如果什么都无法访问,cancan 将 @posts 设置为 nil,然后世界就结束了……或者还有其他方法吗?
      • 应该避免这种情况,除非您想在分页之前从数据库中提取所有@posts。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-04
      • 1970-01-01
      • 1970-01-01
      • 2016-05-09
      • 2019-02-03
      • 2012-11-10
      • 1970-01-01
      相关资源
      最近更新 更多