2015-02-24 42 views
0

用will_paginate或Kaminari可以與範圍和CanCanCan分頁。 How to do pagination with cancan?用CanCan塊分頁

但是,這隻解釋瞭如果你的CanCan能力使用哈希如何做到這一點。如果你使用一個塊,這將不起作用。我理解這一點,因爲哈希轉換爲SQL語句。我似乎無法想象用block語句來做這件事的方法。

例如:

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將barf全部。也許這會在Kaminari工作?

謝謝!

回答

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]) 

它精美的作品。