2016-06-14 4 views
0

Heute Paginieren Ich versuche, die Elemente aus einer Liste zu präsentieren, die paginierte waren:Rails + Paginieren wird eine Liste Moderator

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

Das Problem ist, dass die Nutzer nicht mehr (nach Zuordnung zu meinem Moderator) ein Array Umhüllt mit will_paginate magic, also enthält es nicht solche Dinge wie total_entries, per_page oder page, dann funktioniert der will_paginate Helfer nicht in meiner Sicht: S.

Wie soll ich fortfahren, um eine Liste von nachbearbeiteten Objekten zu paginieren?

Ich habe versucht, um die andere Art und Weise zu tun, aber dann, wenn ich eine riesige Menge von Datensatz in meinem Tisch habe es wirklich schmerzhaft sein, weil es von einem großen Ergebnismenge Paginieren wird, die bereits abgerufen wird:

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

Vielen Dank im Voraus

Antwort

0

Ich würde vorschlagen, dass Sie immer noch users für will_paginate verwenden und eine weitere Instanzvariablen für Referenten hinzufügen.

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

Vielleicht

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 

und

ein UserCollectionPresenter und UserPresenter auf diese Weise zu erstellen ich würde versuchen,

Im Controller sollten Sie die paginierte AR-Sammlung senden und später können Sie paginate verwenden. Nicht sicher, welche Methoden du von will_paginate benötigst, aber ich würde daran denken, sie entweder zu delegieren, sie zu überschreiben oder sie direkt aus will_paginate hinzuzufügen.

Verwandte Themen