С помощью will_paginate или Kaminari вы можете разбивать на страницы с помощью областей видимости и CanCanCan. Объясняется здесь, Как выполнить разбиение на страницы с помощью канкана?
Но это только объясняет, как это сделать, если ваша способность 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 будет блевать по этому поводу. Может быть, это сработает в Каминари?
Спасибо!