【问题标题】:Pagination with CanCan block使用 CanCan 块进行分页
【发布时间】:2015-02-24 21:48:29
【问题描述】:

使用 will_paginate 或 Kaminari,您可以使用范围和 CanCanCan 进行分页。这里解释一下,How to do pagination with cancan?

但这仅解释了如果您的 CanCan 能力使用哈希值时如何执行此操作。如果您使用块,那将不起作用。我理解这是因为哈希转换为 SQL 语句。我似乎想不出用块语句来做这件事的方法。

例如:

can :read, Shipment do |shipment|
  user.client_ids.include? shipment.client_id
end

如果客户在他们的客户列表中,用户只能查看货件。

@shipments = Shipment.ransack(params[:q]).result.uniq.paginate(page: params[:page]).select { |shipment| can? :show, shipment }

执行此操作并返回记录数组的一种方法。但是 will_paginate 需要分页对象。

<%= will_paginate @shipments %>

will_paginate 会吐出这一切。也许这对 Kaminari 有用?

谢谢!

【问题讨论】:

    标签: ruby-on-rails pagination will-paginate kaminari cancancan


    【解决方案1】:

    也许更好的方法是对一个块使用散列。无论如何,它更有效。 (https://github.com/CanCanCommunity/cancancan/wiki/Defining-Abilities#hash-of-conditions)

    我将我的块转换为哈希

    can :read, Shipment, client_id: user.client_ids
    

    在我的查询链中 (https://github.com/CanCanCommunity/cancancan/wiki/Fetching-Records)

    @shipments = Shipment.accessible_by(current_ability, :show).ransack(params[:q]).result.uniq.paginate(page: params[:page])
    

    而且效果很好。

    【讨论】:

      猜你喜欢
      • 2011-08-23
      • 1970-01-01
      • 2016-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多