[Ror-es] Errores personalizados

David Siñuela siu.4coders at gmail.com
Wed Nov 9 14:58:20 GMT 2005


Yo también uso un fichero como el de traducciones.rb con el siguiente contenido:

------------

Inflector.inflections do |inflect|
  inflect.plural /$/, 'es'
  inflect.plural /s$/, 's'
  inflect.plural /z$/i, 'ces'
  inflect.plural /([aeiou])$/i, '\1s'
  inflect.plural /_(.*)$/, 's_\1'

  inflect.singular /s$/i, ''
  inflect.singular /ces$/i, 'z'
  inflect.singular /(.*)s_(.*)/i, '\1_\2'

  inflect.irregular 'user', 'users'
  inflect.irregular 'estado_civil', 'estados_civiles'

  inflect.uncountable %w( pantalones ) # xD
end

class ActiveRecord::Errors
	def full_messages
		full_messages = []
		
		@errors.each_key do |attr|
			@errors[attr].each do |msg|
				next if msg.nil?
				
				if attr == "base"
					full_messages << msg
				else
# 					full_messages << @base.class.human_attribute_name(attr) + " " + msg
					full_messages << msg
				end
			end
		end
		
		return full_messages
	end
end

module ActionView
	module Helpers
		module ActiveRecordHelper
			# Ayudante para mostrar el contenido del flash
			def mostrar_flash
				return if @flash.empty?
				a = ''
				@flash.each do |i|
					a << "<div id=\"flash-div\" class=\"flash-#{i[0]}\"
style=\"display:none\">"
					a << '<p><strong class="alerta">Aviso:</strong> ' + i[-1] + '</p>'
					a << '</div>'
				end
				a
			end
		
			alias :show_flash :mostrar_flash
		
			def error_messages_for(object_name, options = {})
				options = options.symbolize_keys
				object = instance_variable_get("@#{object_name}")
				unless object.errors.empty?
					content_tag("div",
						content_tag(
								options[:header_tag] || "h2",
								"El #{object_name.to_s.gsub("_", " ")} no puede ser guardado."
						) +
						content_tag("p", "Se encontraron los siguientes errores:") +
						content_tag("ul", object.errors.full_messages.collect { |msg|
content_tag("li", msg) }),
							"id" => options[:id] || "errorExplanation", "class" =>
options[:class] || "errorExplanation"
					)
				end
			end
		end
	end
end


class Time
  # Formateo corto de una fecha
  def short_format
    self.strftime("%Y-%m-%d")
  end
end

-------------

Funciona para rails 0.14.x, a tener en cuenta:
 * Como no muestro el nombre del campo en el mensaje de error tengo
que reescribir todos los mensajes de error para dar un mensaje con
sentido.
 * Se da por hecho que en el flash sólo hay un mensaje por cada índice del hash

Y bueno, eso es lo que hay.

Saludos.

El 9/11/05, Luis José Da Silva González<luisjoseve at gmail.com> escribió:
> Gracias.
>
> El 9/11/05, Vicente Reig<vicente.reig at gmail.com> escribió:
> > Hi,
> >  yo tengo esto en mi environment.rb:
> >
> >  ActiveRecord::Errors.default_error_messages = {
> >    :inclusion => "no está incluido en la lista",
> >    :exclusion => "es un campo reservado",
> >    :invalid => "no es válido",
> >    :confirmation => "no está confirmado",
> >    :accepted => "debe ser aceptado",
> >    :empty => "no puede estar vacío",
> >    :too_long => "es demasiado largo (%d caracteres como máximo)",
> >    :too_short => "es demasiado corto (%d caracteres como mínimo)",
> >    :wrong_length => "debe tener %d caracteres",
> >    :taken => "ya se ha selecccionado",
> >    :not_a_number => "no es un número"
> >  }
> >
> > Que viene a ser más o menos lo mismo que lo que hace Vicente.
> >
> >  Un saludo, Vicente. (es decir yo :-) )
> >
> >
> > On 11/9/05, Vicente Gallur Valero <vicente at vgcomunicacion.com> wrote:
> > > >
> > > >
> > > >Me imagino que a todos nostros no nos conviene mucho el mensaje de
> > > >notificación de errores en los forms por validación, 1 error
> > > >prohibited .... etc etc, alguno de ustedes sabe cómo cambiar ese
> > > >mensaje a español?
> > > >
> > >
> > > De momento yo tengo un archivo traducciones.rb en /lib semejante a esto:
> > >
> > >
> > Date::MONTHNAMES=["","Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"]
> > >
> > > module ActiveRecord
> > >   class Errors
> > >     begin
> > >        @@default_error_messages = {
> > >       :inclusion => "no está incluido en la lista",
> > >       :exclusion => "está reservado",
> > >       :invalid => "no es válido",
> > >       :confirmation => "no es una confirmacion",
> > >       :accepted  => "debe ser aceptado",
> > >       :empty => "no puede estar vacío",
> > >       :blank => "no puede estar en blanco",
> > >       :too_long => "es demasiado largo (máximo %d caracteres)",
> > >       :too_short => "es demasiado corto (mínimo %d caracteres)",
> > >       :wrong_length => "no tiene la longitud correcta (debería tener %d
> > > caracteres)",
> > >       :taken => "ya ha sido escogido",
> > >       :not_a_number => "debe ser un número",
> > >       }
> > >     end
> > >   end
> > > end
> > >
> > >
> > > module ActionView #nodoc
> > >   module Helpers
> > >     module ActiveRecordHelper
> > >       def error_messages_for(object_name, options = {})
> > >         options = options.symbolize_keys
> > >         object = instance_variable_get("@#{object_name}")
> > >         unless object.errors.empty?
> > >           content_tag("div",
> > >             content_tag(
> > >               options[:header_tag] || "h2",
> > >               "Hay errores que impiden guardar el registro"
> > >             ) +
> > >             content_tag("p", "Compruebe los siguientes campos:") +
> > >             content_tag("ul",
> > object.errors.full_messages.collect {
> > > |msg| content_tag("li", msg) }), "id" => options[:id] ||
> > > "errorExplanation", "class" => options[:class] || "errorExplanation" )
> > >         end
> > >       end
> > >     end
> > >   end
> > > end
> > >
> > > y en /controllers/application.rb lo incluyo:
> > >
> > > require 'traducciones'
> > >
> > > --
> > > Vicente Gallur Valero
> > > http://www.vgcomunicacion.com
> > >
> > > _______________________________________________
> > > Ror-es mailing list
> > > Ror-es at lists.simplelogica.net
> > > http://lists.simplelogica.net/mailman/listinfo/ror-es
> > >
> >
> >
> >
> > --
> > Vicente Reig Rincón de Arellano
> > http://weblogs.javahispano.org/page/vitxo/
> > _______________________________________________
> > Ror-es mailing list
> > Ror-es at lists.simplelogica.net
> > http://lists.simplelogica.net/mailman/listinfo/ror-es
> >
> >
> >
>
>
> --
> Luis José Da Silva G.
> _______________________________________________
> Ror-es mailing list
> Ror-es at lists.simplelogica.net
> http://lists.simplelogica.net/mailman/listinfo/ror-es
>


--
------------------------------------------
David Siñuela Pastor (siu)
http://www.4coders.com
Jabber: siu at jabberes.org


More information about the Ror-es mailing list