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 🙂

About Ibon

Me encanta salir a darme paseos, patinar, esquiar y jugar a baloncesto (alguna pachanga que otra en Larrabetzu los miércoles). Creo en los principios que fundamentan el Software Libre, y me parece una gran herramienta para conseguir una sociedad mas justa.
This entry was posted in Programación and tagged , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.