Ruby on Rails errores personalizados

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 %>

No hay Trackbacks

5 Comentarios

  1. 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.

    Comentado 7 Mayo 2008 a las 19:19 | Permalink
  2. 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 :)

    Comentado 7 Mayo 2008 a las 20:01 | Permalink
  3. En el controlador:
    error = Error.new(“tipo”)
    @error = error

    Vista:
    <ul>
    < % @error.lista.to_s %>
    </ul>

    Comentado 7 Mayo 2008 a las 20:05 | Permalink
  4. 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.

    Comentado 8 Mayo 2008 a las 3:49 | Permalink
  5. 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 :)

    Comentado 8 Mayo 2008 a las 13:05 | Permalink

Escribe un Comentario

Tu e-mail nunca será compartido. Los campos requeridos están marcados *

*
*

dokshor.com (RSS) + Sator-ii theme by Felipe Lavín and finally edited by dokshor.