No me va mal. Mi aplicación está prácticamente terminada. Estoy
esperando a que los usuarios me digan si hay algo que cambiar. La
paginación funciona sin ningún problema.
Esta debe ser la 3ª o 4ª vez que te lo digo pero creo que deberías
dejar de utilizar SQL y empezar a utilizar el adaptador. Creo que la
mayoría de tus problemas vienen por ahí.
Si no utilizas el adaptador esto es lo que creo que deberías hacer
basado en la siguiente instrucción:
@pager = ::Paginator.new(Mi_tabla.count, 5) do |offset, per_page|
Mi_tabla.find(:all, :limit => per_page, :offset => offset)
end
Tienes que remplazar "Mi_tabla.count" con una variable en la que hayas
almacenado el número de registros en tu tabla, que habrás obtenido con
una sentencia SQL. Además tienes que remplazar "Mi_tabla.find
(:all, :limit => per_page, :offset => offset)" con un array que
contenga los datos de los registros que quieres procesar. Cuando
construyas el array la sentencia SQL tiene que utilizar LIMIT y
también OFFSET, pero no sé si esa funcionalidad existe en Oracle ahora
mismo.
He encontrado un ejemplo para MySQL en la página SQL Pagination with LIMIT and OFFSET
SELECT column FROM table
LIMIT 10 OFFSET 10
He buscado también por si lo podía encontrar en Oracle y he encontrado
otra página (Uwyn - Home
limit_and_offset_in_oracle) donde se decía que LIMIT y OFFSET no
existen en Oracle (el artículo de la página es de 2004) pero que se
podía conseguir el mismo efecto con la siguiente sentencia:
SELECT * FROM (
SELECT ROW_NUMBER() OVER(ORDER BY column1) LINENUM, column1,
column2
FROM MyTable
ORDER BY column1
)
WHERE LINENUM BETWEEN 100 AND 200;
No he verificado nada pero a pesar de no conocer todos los "keywords"
utilizados la sentencia parece legítima.
De todas formas lo que están intentando hacer con el paginador es algo
que podrías hacer manualmente y creo que sería bastante sencillo. Lo
único que tienes que hacer es saber qué página necesitas mostrar (la
primera cuando sea la primera vez que construyes la página y luego te
lo proporcionará el usuario) y cuántos registros hay en cada página.
Con esos dos datos puedes seleccionar los registros que necesites de
tu completo resultset y generar la página con ellos.
Espero que esto te ayude.
Pepe