En mis últimos proyectos uso el plugin (ahora gema) 'will paginate' para la paginación de listados. Uno de los problemas que nos encontramos es cuando el listado tiene, por ejemplo, 4 paginas y el usuario intenta ir a la página 5. Esto ocurre muy amenudo cuando se borra el último elemento de una página.

El propio will_paginate nos ofrece una función para este tipo de casos y su aplicación es bastante trivial.

 
 por_pagina = 10
 @noticias = @noticias.paginate :page => params[:page], :per_page => por_pagina
 @noticias = @noticias.paginate :page => @noticias.page_count, :per_page => por_pagina if @noticias.out_of_bounds? and @noticias.total_entries > 0
 
 

La idea es bastante sencilla. Paginamos por primera vez normal, y, en caso de que la página que nos devuelve el paginate este fuera de los limites (out_of_bounds ) y exista algun elemento (total_entries > 0) volvemos a paginar usando como parametro de página la ultima página con entradas (page_count).

Espero que haya quedado claro! Un saludo.