[QuickTip] Paginación en Rails 3 y Mongoid


Así que tienes una RailsApp con Mongoid que tiene muchísimos records en la base de datos y quieres mostrarlos todos al público de una manera eficiente, ordenada y no abrumadora... ¡Necesitas paginación! En Rails tenemos 3 principales maneras rápidas de lograr implementar paginación en una app: Con Ajax, con la gema Kaminari o con will_paginate.

En este post les hablaré de la última opción, que es la que yo he usado con Mongoid y me ha resultado bastante eficiente, aunque su configuración difiere un poco de la versión para ActiveRecord. Veamos pues cómo integrarla:

1) Añade la gema

Nos vamos a nuestro Gemfile y añadimos:

gem 'will_paginate', '~> 3.0'

Hacemos bundle install y luego proseguimos con:

2) Requerirla en la aplicación

Esto se hace añadiendo las siguientes líneas a tu archivo config/application.rb:

require 'will_paginate'
require 'will_paginate/array'

3) Paginar en el controlador

Por ejemplo, si yo quiero paginar mi acción Index del controlador que por default muestra todos los records de un determinado objeto de la base de datos en su vista, haría algo como:



En este caso estaría paginando en mi acción Index del controlador todos los objetos de "CallBundle" mostrando 10 resultados por página que el usuario pase con su selector (osea picándole al numerito 1-2-3-4 etc).

4) Activarlo en la vista

Ahora si quiero tener paginación en dicha vista index, le añado:

<%= will_paginate @call_bundles %>

Donde @call_bundles es el objeto a paginar que elegí en el controlador.

Y eso es todo! estamos paginando en nuestra app rails con backend mongoid, ahora solo queda (si queremos) pasarle algo de CSS a ese paginador y listo.