Quizás mucha gente debe conocer este plugin para añadir paginación a nuestras aplicaciones Rails, pero he pensado en hacer este artículo para compartirlo con los que aún no lo conocen.
Recientemente con Rails 2.0 se ha quitado la opción de paginación (Paginator) que había ya que según ellos era muy lenta y no estaban satisfechos. Por tanto ahora hemos de buscarnos la vida para hacer paginación en nuestras consultas.
Existe el plugin will_paginate que resuelve la problemática de forma muy sencilla. Para encontrar toda la información y documentación podemos ir a la página de Errtheblog dedicada a este.
Para instalarlo ( desde el directorio de la aplicación):
script/plugin install svn://errtheblog.com/svn/plugins/will_paginate
Su uso es muy sencillo ya que sólo tenemos que usar en el controlador una instrucción como:
@posts = Post.paginate :page => params[:page], :per_page => 50
Esto se traducirá que cuando llame a una página nueva añadirá a la ruta ?page=x automáticamente. No hay que tocar las rutas para nada lo hace automáticamente.
y en la vista añadir:
<%= will_paginate @posts %>
Para mostrar los enlaces a las páginas.
Como veis es muy sencillo y además dispone de otros métodos que emulan cualquier llamada que pendiésemos hacer con el método find:
- find —> paginate
- find_by_id –> paginate_by_id
- find_by_sql –> paginate_by_sql
Especialmente está última me ha hecho muy fácil en L-exp hace una paginación en unas consultas muy complejas. Todo de forma trivial.
Si migráis a Rails 2.0 y ya lo habéis estado utilizando volver a instalarlo con el parametro –force para que lo actualice. En mi caso arreglo algún problema que tenía.

2 Comments
at 18:50 :21 - 12th January 2008 Permalink
Muy bueno este plugin. Sólo añadir que el mismo autor tiene classic_pagination, que es la paginación de Rails 1 en formato de plugin, que para salir al paso puede venir bien.
Eso si, will_paginate es mejor, más rápido por lo que dicen.
at 11:38 :06 - 4th March 2008 Permalink
saludos.
He descargado el pluguin (lo tengo en mi proyecto, en la carpeta vendor/pluguin), pero al ejecutar me da error:
undefined method `paginate’ for #<Class:0×394a428
He añadido en el fichero de configuracion
“require will_paginate”.
Que me falta?
Gracias
Post a Comment