Fixing fieldWithErrors behavior
Dealing with errors in Rails forms can be a hard task. When a form field has errors, ActionView wraps the input in a div of class “fieldWithErrors”. The result is something like this
<p><div class="fieldWithErrors"><input id="user_name" name="user[name]" type="text" value="" /></div></p>
A div inside a paragraph ?¿?¿? This behavoir can be very annoying and isn’t XHTML compliant. A simple solution is add this line at the end of environemnt.rb or in a file under lib dir:
ActionView::Base.field_error_proc = Proc.new { |html_tag, instance| "<span class=\"fieldWithErrors\">#{html_tag}</span>" }
This is the result
<p><span class="fieldWithErrors"><input id="user_name" name="user[name]" type="text" value="" /></span></p>
A single line that simplifies your life ;)

July 13th, 2009 at 05:53
Rather interesting. Has few times re-read for this purpose to remember. Thanks for interesting article. Waiting for trackback
September 14th, 2009 at 20:03
Una pregunta, yo tengo este código:
Me genera esto:
Email
Lo que me gustaría es conseguir esto:
Email
Error de validación
No sé si se entiende, lo que quiero es por un lado mostrar el texto del error dentro de un TAG . Esto es fácil.
Pero luego tengo dos problemas:
1- ¿Como asignar una clase al div contenedor de html_tag?
2- Como lo tengo, rails tambien detecta a mi label como un html_tag. Por lo que también le añade el mensaje de error. Cosa fea.
Aquí hacen algo [1], pero no soy capaz de adaptarlo a lo que quiero.
[1] http://dev.rubyonrails.org/ticket/7425
September 14th, 2009 at 20:09
Perdón me ha escapado todo el HTML. \:O
Basicamente la idea es los input rodeados de un div y acompañados de un label con el atriubuto for igual al id del input.
Y el error sería ese mismo DIV pero con un class=”error”. y el texto del error debajo del INPUT en un EM tag.
Y luego las preguntas que he planteado arriba.
September 14th, 2009 at 20:09
WP se ha comido el código html, para poner tags debes usar los códigos ascii
http://www.ascii.cl/es/
September 14th, 2009 at 20:13
Gracias Emili, lo tendré en cuenta para la próxima. Alguna idea con mi problema. Si quieres posteo el HTML con ASCII.
Un saludo
September 14th, 2009 at 21:48
Al tema de cómo evitar que me añada el error de validación a los labels, lo he resuelto así [1]
Ahora me queda la duda de saber si puedo acceder desde ahí al DIV contenedor de los dos html_tag que tengo LABEL e INPUT. ¿Se podrá?
[1] http://pastie.org/616665
September 20th, 2009 at 10:36
Para que quede claro lo que pretendo. Andrew Vit ha expuesto lo que yo quiero hacer en un ticket de lighthouse [1]
Aunque pienso que la gente de Rails no piensa lo mismo. Porque parece que no le han hecho mucho caso. Y creo que no es algo trivial lo que el propone. En fin, de momento tiraré con lo que puse en el mensaje anterior que es poner la clase css en los inputs (más o menos la opción que propone Adam Milligan)
NOTA:
He leido que un archivo en initializers también es buen sitio para colocar un archivo del estilo…field_erros.rb
Un saludo
[1]https://rails.lighthouseapp.com/projects/8994/tickets/1626-fieldwitherrors-shouldnt-use-a-div#ticket-1626-35
[2] https://rails.lighthouseapp.com/projects/8994/tickets/1626-fieldwitherrors-shouldnt-use-a-div#ticket-1626-9
September 22nd, 2009 at 21:56
La verdad es que este tema trae cola. En el tema del HTML cada uno tiene sus preferencias y al final acabas personalizando lo que necesitas , que crear un archivo con tus modificaciones lo metes en initializers y marchando.
September 23rd, 2009 at 08:35
Pues marchando, eso he hecho. De momento lo dejo aparcado…seguro que me vuelvo a enfrentar en otro momento a este problema.
Gracias,
Un saludo