用CanCan块分页

时间:2015-02-24 00:03:38

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

使用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中使用?

谢谢!

1 个答案:

答案 0 :(得分:0)

也许更好的方法就是在块上使用哈希。无论如何它更有效率。 (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])

它的工作非常精彩。