Estas aburrido de tener en los errores algo como esto?
- Persona La contraseña debe ser mayor a 10 caracteres
- Paise Debe completar su país para continuar
La verdad que encontre una solucion media sucia, que en un futuro será remplazada por nuestro amigo usuario_helper.rb
Aca va el codigo:
<% unless @usuario == nil or @usuario.errors.empty? %>
<h3>Errores registrando su usuario</h3>
<ul>
<% @usuario.errors.each_full do |message| %>
<li>
<%
# Declaramos la variabl, y la inicializamos en 0
i = 0
# Separamos el error por espacio
error = message.split(' ')
# Recorremos el error
error.each do |mensaje|
%>
<%= mensaje if i > 0 %>
<% i = i+1 end%></li>
<% end%></ul>
<% end %>
Tags: errores, ror, Ruby on Rails
No hay Trackbacks
5 Comentarios
Hola, tan sólo quiero comentar que no me parece usar el objeto Usuario como el responsable de contener sus errores en un atributo (usuario.errors). Más allá de la implementación mostrada.
Entiendo el objeto usuario como una entidad con precisamente la responsabilidad de representar el comportamiento eespecificado.
Si producto de una acción manejada por un controlador, donde el controlador ordena realizar ciertas cosas, al producirse errores estos deberÃan ser contenidos en un objeto que si tenga ese comportamiento (Experto), por ejemplo un Singleton de mensajes de error. Finalemente asà no acoplas los mecanismos propios de tu solución software con la naturaleza del modelo, pues entiendo que el objeto usuario no debe conocer jamás el mecanismo por el cual es utilizado y despachado a vistas o persisitido (Bajo acoplamiento).
En lo personal yo uso un contenedor de mensajes codificados que tienen un tipo y depende las acciones del controlador (o los interceptores que validan o filtros en cadena) van agregando errores. Luego si estos contenedores tienen objetos ErrorMsg o Msg simplemente los muestro en un partial.
Saludos Fabián, muy buen blog.
Estimado Leo:
Muy buena respuesta y de hecho estoy bastante de acuerdo contigo. Mi consulta es:
– Como lo haces para rellenar los valores de @request['usuario'] para los inputs y selects de forma automatica como me lo maneja actualmente este controlador asociado con esta vista?
Saludos
En el controlador:
error = Error.new(“tipo”)
@error = error
Vista:
<ul>
< % @error.lista.to_s %>
</ul>
Hola, la respuesta del tema de rellenar los datos del request es responsabilidad del Controlador en cuestión. En spring esto es automà tico gracias a los binds de los formularios, pero en Symfony yo hago un método command donde le paso el Objeto para ser llenado asà usas el objeto para validarlo posteriormente y/o volver a desplegarlo en el formulario si hay errores. De esa forma tienes el objeto y si corresponde lo envÃas a persistir a través de un manager – pero desacoplas la “carga desde el formulario” y luego sigues trabajando con el objeto.
Saludos.
Leo, entiendo lo que quieres decir, de hecho yo hago lo mismo con CakePHP y en mis proyectos J2EE.
Lo que pasa que para ruby hay que especificarlo de esa manera, si quieres mas saber al caso de RoR , sigue el siguiente Link:
http://www.railsforum.com/viewtopic.php?pid=3714
Saludos