Publicidad:
La Coctelera

Rescue true.

Para los caballeros que siempre dicen nil!

1 Abril 2009

Will Paginate: Ir a la ultima página con elementos (out of bounds?)

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

31 Marzo 2009

Rails + MySQL: Buscador con y sin tildes

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!

Tags: rails, mysql, sql, ruby

servido por x-or sin comentarios compártelo


Sobre mí

Fotos

x-or todavía no ha subido ninguna foto.

¡Anímale a hacerlo!

Categorías

Buscar

suscríbete

Selecciona el agregador que utilices para suscribirte a este blog (también puedes obtener la URL de los feeds):

¿Qué es esto?

Crea tu blog gratis en La Coctelera