Rails obsahují už delší dobu podporu pro stránkování pomocí klasického

@foo_pages, @foo = paginate(:foo, :order => 'bar' )

Problém je, že jde o trochu podivný zápis, vestavěné stránkování je nedoporučované kvůli mizernému výkonu a navíc ve verzi 2.0 bude kompletně odstraněno. Jedna možnost jak ho nahradit je napsat si vlastní, druhá využít skvěle fungujícího ekosystému pluginů. Já jako typický Rails programátor (tedy líný a nesnášející psaní rutinních věcí) jsem sáhl po druhé možnosti. Google po chvilce hledání odhalil skvělý plugin will_paginate. Proč je tak skvělý? Je jednoduchý na používání a dělá přesně co je potřeba.

Instalace klasicky v adresáři vaší aplikace:

ruby script/plugin install svn://errtheblog.com/svn/plugins/will_paginate

Samotné použití je jednoduché – prostě nahradíte volání find() objektu ActiveRecord za volání paginate a předáte mu parametr :page => params[:page], například takhle:

@foos = Foo.paginate(:all, :page => params[:page])

Výchozí počet záznamů na stránku je 15, změnit to můžete buď při volání paginate pomocí parametru :per_page nebo globálně pro určitý model přidáním metody per_page:

class Foo < ActiveRecord::Base
    def self.per_page
        50
    end
    ...
end

Kromě toho samozřejmě můžete používat všechny ostatní parametry známé z find. will_paginate vám poskytne i užitečný helper pro přepínání stránek, který přidáte do view takto:

<%= will_paginate @foos %>

Vzhled helperu můžete kompletně změnit pomocí CSS a autoři pamatovali i na možnost změnit anglické Previous a Next bez potřeby předefinování helperu. Do config/environment.rb jenom přidejte:

WillPaginate::ViewHelpers.pagination_options[:prev_label] = '&laquo; Předchozí'
WillPaginate::ViewHelpers.pagination_options[:next_label] = 'Další &raquo;'

To je vše a můžete vesele stránkovat.

Zanechej komentář

K zanechání komentáře ke článku musíte být přihlášen. Přihlásit »