Caracteres inválidos en el parametro page de will_paginate
Hoy me han llegado al correo varias notificaciones de excepciones del site del Centenario do Inter. Estos errores se han generado por no indicar el parámetro page del will_paginate, de la siguiente forma:
http://localhost:3000/fotos?page=
El código de will_paginate no contempla eso, por lo que tenía dos opciones. Una poner un filtro en mis controladores para asegurarme de que hubiese algún número de pagina. Esa opción es muy poco DRY, así que he hecho el siguiente cambio en el collection.rb del plugin de will_paginate:
Index: vendor/plugins/will_paginate/lib/will_paginate/collection.rb
===================================================================
--- vendor/plugins/will_paginate/lib/will_paginate/collection.rb (revisión: 65)
+++ vendor/plugins/will_paginate/lib/will_paginate/collection.rb (copia de trabajo)
@@ -16,7 +16,7 @@
# populating the collection using the +replace+ method.
#
def initialize(page, per_page, total = nil)
- @current_page = page.to_i
+ @current_page = !page.blank? && page != 0 && page.to_i != 0 ? page.to_i : 1
@per_page = per_page.to_i
self.total_entries = total if total
La verdad es que no se, ni si eso está contemplado en versiones posteriores a la que estoy usando, ni si es una buena solución, pero a mi me ha servido para resolver el problema rápidamente y sin tirar apenas código.
Con ese cambio, además de asegurarme de que la aplicación no de 500 al no poner ningún número en el parámetro page, también me aseguro de que no se rompa por poner un parámetro que no sea un número, como por ejemplo:
http://localhost:3000/fotos?page=foobar
Pos eso.
@foo %page 3
Ves…. yo tb se como se juega!
:*
ladyju
29 Jul 08 at 4:22 pm
Ten cuidado con modificar plugins… es una mala constumbre por que haces una aplicación inmantenible. Si no quieres tener problemas si actualizas las gemas/plugins/framework, lo mejor es no tocarlo.
Lo de page, tal vez lo puedas solucionar de manera más dry con requisitos de ruta
http://api.rubyonrails.org/classes/ActionController/Routing.html
Guillermo
1 Oct 08 at 2:32 am
Totalmente de acuerdo en que es dificil mantener una aplicación si tocas plugins y al mismo tiempo andas actualizándolos. No obstante, no es el caso. En esta ocasión no contemplo la actualización de ningún plugin, salvo error garrafal, y tenía que hilar fino para que hubiese los menos errores posibles en la aplicación, aunque se debiese a comportamientos indebidos por parte de los usuarios.
Lo suyo sería que mandase el patch de eso al autor, para ver si le interesa aplicarlo, pero por una razón o por otra no lo hice.
Luis
1 Oct 08 at 7:21 am