Desarrollando una nueva aplicacion totalmente 2.0 que lanzare dentro de 1 mes para uso publico, me he encontrado con el problema que mi base de datos con ciudades estaba totalmente en MAYUSCULAS.
Existian ciudades como:
- VIí‘A DEL MAR
- VICUí‘A.
- Etc.
Mi idea por estetica era dejarlas tipo “Viña del mar”, o “Vicuña”.
Revisando la API String de Ruby, me di cuenta que existe un metodo llamado capitalize. El problema de este metodo que me realizaba todo correcto excepto “Lowercasse (PHPero, C) ” de mi í‘, por lo cual quedaba:
- Vií‘a del mar
- Vicuí‘a
¿Cual fue mi solucion?
Mi solucion fue simple, y consistio en agregar una expresion regular despues del metodo capitalize, de la siguiente forma:
ciudad.nombre.to_s.capitalize.gsub(/[í‘]/, 'ñ')
Santo remedio, todo funciona a la perfeccion.
Saludos
Tags: capitalize, gsub, Ruby, Ruby on Rails
No hay Trackbacks
5 Comentarios
jajajaja buena forma de arreglar ese bug.
A todo esto, viste un articulo que anda dando vueltas acerca de un wnq ue se cambio de php a ruby y despues de dos anios programando en ruby volvio a php, diciendo que ruby es un desperdicio de tiempo.
Saludos si encuentro el link te lo mando
hola. bueno tu blog. una consulta y como haces para que VIÑA DEL MAR llegue a ser Viña del Mar. (Mar con M).
gracias si hay respuesta.
Luchox, con la funcion capitalize
Haces un for, y por cada espacio que encuentres ” ” , haces un capitalize.
Saludos
Y que onda con los acentos? te fijaste como te los capitaliza?
irb(main):001:0> “hola”.capitalize
=> “Hola”
irb(main):002:0> “Único”.capitalize
=> “\303\232nico”
irb(main):003:0> “único”.capitalize
=> “\303\272nico”
El problema es que ruby no tiene soporte para UTF8 nativo como Java. Se salvan al igual que php por permitir cadenas binarias en los String, pero de todas formas uno no puede confiar en las operaciones nativas de string como capitalize, length, etc.
Estimado tienes toda la razon, habrÃa que implementar alguna clase adicional que extienda de la String para soporte español
ñ -> Ñ
ö -> Ö
à -> À
mistring.to_s.es_accents()
Saludos