Mappa Via Marconi 20, Bussolengo (VR)
Email info@devinterface.com

Tips: Paginazione multipla con will_paginate

Will Paginate è la gemma più utilizzata per la paginazione in Ruby on Rails.

Succede a volte di dover paginare più liste diverse su una stessa pagina.

Ma cos'è un'impaginazione?

Con l'impaginazione possiamo limitare il numero di elementi che vengono recuperati dal database e visualizzati in un dato punto. Sbaglio se dico che guardare un pagina con migliaia di elementi ci fa scappare subito dal sito? Non sarebbe meglio mostrare una selezione di elementi per volta?

L'impaginazione fa esattamente questo, suddivide un elenco corposo di elementi in sequenze più contenute in base alle specifiche che gli diamo.

Questo tip mostra come è possibile visualizzare una lista paginata di prodotti ed una lista paginata di servizi su una stessa pagina utilizzando will_paginate.

Per cominciare bisognerà installare la gemma di impaginazione, con il codice seguente:

// in the Gemfile

gem 'will_paginate', '~> 3.1.0'


Giunti a questo punto, il focus verte nell’utilizzo di un parametro param_name personalizzato, sia nella view che nel controller.

Il codice della view sarà simile a questo:

1
2
3
4
5
6
7

<br />
# ...<br />
# la lista di prodotti va qui<br />
<%= will_paginate @products, :param_name => 'products_page', :prev_label => t('helpers.labels.previous'), :next_label => t('helpers.labels.next') %></p>
<p># la lista di servizi va qui<br />
<%= will_paginate @services, :param_name => 'services_page', :prev_label => t('helpers.labels.previous'), :next_label => t('helpers.labels.next') %><br />
# ...<br />

Mentre quest'altro sarà, invece, il codice del controller:

1
2
3
4
5
6
7

<br />
# ...<br />
def index<br />
@products = current_company.products.paginate(:page => params[:products_page], :per_page => 10)<br />
@services = current_company.products.paginate(:page => params[:services_page], :per_page => 10)<br />
end<br />
# ...<br />

 

In questo breve articolo abbiamo capito cos'è un'impaginazione e quanto will_paginate sia davvero semplice da configurare.

Per sapere di più sullo sviluppo in Ruby on Rails consulta questa sezione del sito. Buona programmazione!