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.
servido por x-or
sin comentarios
compártelo
Para empezar metidos en harina el primer post sobre un tema controvertido. Cada cual tiene su manera de hacerlo y para no ser menos que el resto yo tengo la mia. No se si será la mas correcta o si habra mejores formas, pero esta es rapida, barata y funciona.
class Usuario
#Busca usuarios por nombre y apellidos
def self.buscar(texto)
Usuario.find(:all, :conditions => ["concat(nombre,\" \",apellidos) REGEXP '?'", Usuario.expresion_regular_para_sql(texto)])
end
#Sustituye las vocales y vocales acentuada por la cadenda "[vocal,vocal_acentuada]"
def self.expresion_regular_para_sql texto
#Creamos un array con las vocales y su acentuacion
textos_a_sustituir = %w(aá eé ií oó uú)
textos_a_sustituir.each do |cad|
#Con el gsub y la expresion regular cambiamos por la expresion regular de sql: ej para aá -> texto.downcase.gsub!(/[aá]/,"[aá]")
texto.gsub!(/[#{cad}]/,"[#{cad}]")
end
end
end
Lo único que hago es crear la expresion regular sql que me permite buscar con y sin tildes, esto es convertir "Jorge" en "J[oó]rg[eé]". El concat en las conditions permite hacer busquedas del tipo "Jorge Fernández" cuando el nombre y los apellidos estan en campos separados.
Espero que a vosotros tambien os funcione! Por cierto el código esta escrito de memoria y sin ejecutarlo, así que quizá teng algún errorcillo! Si es así hacedmelo saber por favor!
servido por x-or
sin comentarios
compártelo