2016-06-14 27 views
0

今天,我試圖從被分頁列表介紹項目:的Rails +將分頁分頁列表主持人

users = User.order('name').paginate(:per_page => 10, :page => 1).map{|u| UserPresenter.new(e)} 

的問題是,用戶不再(映射後到我的演講)數組用will_paginate魔術包裝,所以它不包含諸如total_entries,per_page或page之類的東西,那麼will_paginate幫助器在我的視圖中不起作用:S。

我應該如何進行分頁後處理對象列表?

我試着做周圍的其他方式,但然後,如果我有一個巨大的在我的表中的記錄量將是真正的痛苦,因爲它會從已經獲取的一大結果集分頁:

users = User.order('name').map{|u| UserPresenter.new(u)}.paginate(:per_page => 10, :page => 1) 

在此先感謝

回答

0

我建議你仍然使用userswill_paginate併爲演示者添加另一個實例變量。

@users = User.order('name').paginate(:per_page => 10, :page => 1) 
@presenters = @users.map { |u| UserPresenter.new(u) } 
0

也許我會嘗試創建一個UserCollectionPresenter和UserPresenter這樣

class UserCollectionPresenter 
    include Enumerable 

    delegate :paginate, to: :collection 

    attr_reader :collection 

    def initialize(collection) 
    @collection = collection 
    @_presentable_collection = collection.map { |user| UserPresenter.new(user) } 
    end 

    def each(&block) 
    @_presentable_collection.each(&block) 
    end 

    def total_count 
    @collection.limit(nil).offset(nil).count 
    end 
end 

而且

class UserPresenter 
    def initialize(user) 
    @user = user 
    end 

    private 

    attr_reader :user 
end 

在控制器中你應該發送分頁AR收集,以後你可以使用paginate。不知道你需要從will_paginate得到哪些方法,但我會考慮委託,「覆蓋」它們或直接將它們包含在will_paginate中。