使用 CanCan 块分页
Pagination with CanCan block
使用 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 }
一种方法和 return 您的记录数组。但是 will_paginate 需要分页对象。
<%= will_paginate @shipments %>
will_paginate 会呕吐的。也许这在 Kaminari 中有用?
谢谢!
也许更好的方法是对块使用散列。无论如何它更有效率。 (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])
而且效果很好。
使用 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 }
一种方法和 return 您的记录数组。但是 will_paginate 需要分页对象。
<%= will_paginate @shipments %>
will_paginate 会呕吐的。也许这在 Kaminari 中有用?
谢谢!
也许更好的方法是对块使用散列。无论如何它更有效率。 (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])
而且效果很好。