1
我有一個組頁面,其中顯示了所有成員的列表。 的GroupsController#的代碼顯示看起來是這樣的如何將分頁的優勢與授權相結合
def show
if @group
@members = @group.members.order(:last_name, :first_name)
@members = @members.page(params[:page]).per_page(25) # pagination
end
respond_with @group
end
我們在應用程序中使用授權與慘慘,和我想限制所顯示的成員的,用戶實際上可以:read
事情是這樣工作的:
@members = @group.members.order(:last_name, :first_name).select{|member| can? :read, member}
@members = @members.paginate(params[:page], per_page: 25)
但據我瞭解它會破壞分頁的性能優勢,那就是它WOU首先加載數據庫中的所有成員,然後選擇可見的成員。 交換它周圍像
@members = @group.members.order(:last_name, :first_name)
@members = @members.page(params[:page]).per_page(25).select{|member| can? :read, member}
也不行,因爲該視圖需要一個特定的WillPaginate ::收集與喜歡的頁數,當前頁面等的元信息 - 而不是一個簡單的數組。
有沒有一種正確的方法來做到這一點,例如鏈接關係和分頁之間的Proc? 我的谷歌福正在失敗我。
完整的代碼可以在github