2016-06-14 1 views
0

Сегодня я пытаюсь представить элементы из списка, которые были постраничными:Rails + отформатируем постраничным список Presenter

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

Проблема в том, что пользователи больше не (после отображения на мой ведущий) массив завернутый магией will_paginate, поэтому он не содержит таких вещей, как total_entries, per_page или страница, тогда помощник will_paginate не работает в моем представлении: S.

Как перейти к разбивке списка объектов, обработанных после обработки?

Я пытался делать наоборот, но потом, если у меня есть огромное количество записей в моей таблице будет очень болезненным, потому что он отформатирует из большого набора результатов, который уже извлеченный:

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

заранее спасибо

ответ

0

Я бы предположил, что вы все еще используете users для will_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 

В контроллере u следует отправить коллекцию с разбивкой по страницам AR, а позже вы можете использовать paginate. Не уверен, какие методы вам нужны из will_paginate, но я бы подумал о делегировании, «переопределении» их или включении их из will_paginate напрямую.

Смежные вопросы