Usando caracteres españoles en las tablas
Esta mañana, a raíz de una pregunta en la lista de correos, he estado haciendo un pequeño experimento, a ver cómo se comporta RoR cuando se utilizan nombres de columnas (y datos) con caracteres acentuados o eñes.
Si eres impaciente, puedes saltar directamente a las conclusiones
.
La prueba
Primero he creado una pequeña tabla en sqlite3:
CREATE TABLE 'niños' (
'id' INTEGER PRIMARY KEY NOT NULL,
'árbol' VARCHAR(80) DEFAULT NULL,
'nombre_niño' VARCHAR(40) DEFAULT NULL
);
A pesar de los acentos y las eñes en los nombres de columnas, no aparece ningún error al crear la tabla, funciona.
Luego metemos un registro para tener algún dato:
sqlite> insert into ni\303\261os values (1,'Casta\303\261o','Sof\303\255a');
sqlite> select * from ni\303\261os;
1|Castaño|Sofía
A continuación generamos el scaffold para ver que obtenemos:
eduardo@[~/desarrollo/test]: ruby script/generate scaffold Ni\303\261o
dependency model
wrong constant name Niño
Ésto sí que no se lo traga. Así que ponemos Nino y vemos el resultado:

Parece que ha cogido bien las columnas pero no visualiza bien ni los nombres ni el contenido.
Al tratar de añadir el nuevo registro, veo que no aparece formulario. Investigando un poco más, resulta que el formulario no aparece en app/views/ninos/_form.html. Debe ser que se ha hecho un lío con los nombres de las columnas al generar el scaffold.
Metemos el código a mano:
<%= error_messages_for 'nino' %>
<%= text_field 'nino', 'árbol' %>
<%= text_field 'nino', 'nombre_niño' %>
Y Bingo, parece que funciona bien la edición:


Y además sale el contenido de los campos visualizado de forma correcta.
Conclusiones
- Las columnas de tabla con caractéres españoles (y por lo tanto los métodos de las clases que se derivan de ellos) funcionan con Ruby on Rails.
- Hay cosas de RoR (partes del scaffold) que no funcionan bien con las columnas con caracteres españoles, aunque aparentemente los problemas son fácilmente solucionables.
- Los datos con caracteres españoles no deben suponer ningún problema. Esto es bastante obvio porque llevamos toda la vida metiendo nuestros nombres con sus acentos y eñes en las BBDD.
- Trabajar con caracteres acentuados en otro sitio que no sean los datos es un rollo: No se si será por el editor que he usado (ver abajo) o por otra razón, pero constantemente salían los caracteres mál visualizados: bien como códigos estilo \xxx como ? o en el navegador cómo à y cosas por el estilo.
No creo que merezca la pena complicarse la vida con poniéndo los nombres de columnas con caracteres españoles, a menos que tenga una justificación clara, nadie nos garantiza cómo va a funcionar con distintos sistemas y Bases de Datos.
Detalles técnicos
Esta prueba está hecha con:
- La última versión de rails (0.13.1) corriendo en un iBook G4 con Mac OS 10.4.2.
- El gestor de base de datos sqlite3.
- El editor vi.

sergio dijo
Es probable que vi este usando latin-1 mientras que la entrada desde la pagina este usando utf-8, no?
22 Julio 2005 | 10:18