Retroceder   Foros del Web > Programación para sitios web > Ruby on Rails

Respuesta
 
Herramientas Desplegado
Antiguo 04-mar-2008, 12:06   #1 (permalink)
melj_mat ha deshabilitado el karma
 
Fecha de Ingreso: febrero-2008
Mensajes: 5
Cambiar las clases de rubyonrails

Buenas muchachos.. tengo una duda aca... como hago para modificar el metodo validates_presence_of de la clase ActiveRecord::Validations::ClassMethods de manera que cuando me imprima el error no me muestre el campo al que esta asociado el error.. espero que alguien me pueda ayudar..
melj_mat está desconectado   Responder Citando
Antiguo 09-mar-2008, 11:40   #2 (permalink)
el_ro no se puede cailificar en este momento
 
Fecha de Ingreso: marzo-2007
Mensajes: 134
Re: Cambiar las clases de rubyonrails

No necesitas redefinir las validaciones para algo que es netamente visual, lo que puedes hacer es redefinir el helper que muestra el dialogo de errores, como te darás cuenta cuando muestras los errores de un formulario llamas al metodo "error_messages_for", pues bien, partiendo del codigo de la api de ror (tambien le quite algunas cosas para hacerlo mas simple), se me ocurrio esta solucion para tu problema:

Código:
  def error_messages_for(*params)
    options = params.last.is_a?(Hash) ? params.pop.symbolize_keys : {}
    objects = params.collect {|object_name| instance_variable_get("@#{object_name}") }.compact
    count   = objects.inject(0) {|sum, object| sum + object.errors.count }
    unless count.zero?
      html = {}
      [:id, :class].each do |key|
        if options.include?(key)
          value = options[key]
          html[key] = value unless value.blank?
        else
          html[key] = 'errorExplanation'
        end
      end
	  error_messages = objects.map {|object| object.errors.map {|msg| content_tag(:li, msg[1])}}
      content_tag(:div,
        content_tag(:h2, 'Se encontraron los siguientes errores:') <<
        content_tag(:ul, error_messages),
        html
      )
    else ''
    end
  end
Donde la parte importante del codigo y el gran cambio sucede en una sola linea:

error_messages = objects.map {|object| object.errors.map {|msg| content_tag(:li, msg[1])}}

Antes se utilizaba el método object.errors.full_messages, que retorna un Array con el atributo del error unido al mensaje, en cambio, ahora solo mostramos la descripcion del error con msg[1], mas no el campo donde ocurrio el error, esto significa que ya no queremos que muestre el nombre del atributo dentro del mensaje de error, esto es un riesgo pues puede resultar confuso si no especificas en el mensaje dónde ocurrió el error, aqui te pongo un ejemplo:

class Algo < ActiveRecord::Base
...
validates_presence_of :titulo, :message => "El atributo necesita un titulo!"
...
end


de esta forma, puedes personalizar mas tus mensajes de error y mostrarlos de la misma forma que siempre lo harías, espero te sea util, saludos.
__________________
http://www.gritala.net/botones >> Intercambia enlaces con Gritala.net :p

http://www.agregala.com >> Envía tus noticias y gana enlaces y visitas!

Última edición por el_ro; 09-mar-2008 a las 11:47.
el_ro está desconectado   Responder Citando
Antiguo 12-mar-2008, 09:57   #3 (permalink)
melj_mat ha deshabilitado el karma
 
Fecha de Ingreso: febrero-2008
Mensajes: 5
Re: Cambiar las clases de rubyonrails

Muchisimas gracias.. ahora seguiremos adelante con el proyecto...
melj_mat está desconectado   Responder Citando
Antiguo 10-abr-2008, 13:04   #4 (permalink)
rdavila ha deshabilitado el karma
 
Fecha de Ingreso: abril-2008
Mensajes: 14
Re: Cambiar las clases de rubyonrails

Hola melj_mat, tal vez este plugin tambien te pueda ser util:

http://rubyforge.org/projects/custom-error-message/

Saludos.
rdavila está desconectado   Responder Citando
Respuesta
No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 12:30.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93