| |||
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.. |
| |||
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:
Donde la parte importante del codigo y el gran cambio sucede en una sola linea: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 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/03/2008 a las 11:47 |