Mensajes de error personalizados al validar: Rails 2.3 y llamadas Ajax

Tenemos algunas aplicaciones funcionando con Rails 2.3 y me ha llevado un ratito averiguar como especificar un mensaje de error personalizado cuando se realiza una validación desde una llamada Ajax. Los errores flash no son un problema, ya que basta con crear la validación por ejemplo así:

 validates_format_of :telf,
      :with =>/^[0-9]{9}\s*(,?\s*[0-9]{9})*$/,
      :message => ': hay un problema con el formato de los números de teléfono',
      :if => :telf,
      :allow_blank => true

El mensaje de error se especifica mediante el símbolo ‘:message’, y rails lo muestra mediante el mecanismo de ‘errores flash’ sin problema. Sin embargo, al utilizar la gema Hobo y los editores de formulario que realizan cambios en los registros desde los shows directamente, mediante llamadas Ajax a los métodos update de los controladores; al mostrar un error mediante un alert, aparecía un incómodo mensaje:

No es posible realizar el cambio: 
{{attribute}} {{message}}

El problema es que attribute y message no se estaban interpolando correctamente y necesitaba modificarlos para poder mostrar un mensaje algo mas específico. La solución, como casi siempre, en los comentarios y la documentación 🙂
Indagando el código fuente de Rails 2.3.8, concretamente en el fichero: /donde_tengas_la_gema_instalada/activerecord-2.3.8/lib/active_record/validations.rb, en la línea 81, se especifica que tocando el fichero locales correspondiente, puedes mostrar el mensaje que necesites. ¡Dicho y hecho!, basta con añadir:

  activerecord:
     errors:
       full_messages:
         format: 'Este es un mensaje personalizado'

y listo 🙂

Acerca de Ibon

Me gusta salir a correr, pasear, andar en bici y patinar :) Si no te saludo es que, o no llevo las gafas puestas o que tengo mal día. Pero no te lo tomes a mal: seguro que mañana estoy de mejor humor ;) Me gusta escuchar algunos podcasts sobre divulgación científica: Coffee Break, CienciaES, y algunos otros que divulgan buen karma. Creo en los principios que fundamentan el Software Libre, y me parece una gran herramienta para conseguir una sociedad mas justa.
Esta entrada fue publicada en Programación y etiquetada , . Guarda el enlace permanente.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.