Problema: error_message_on NO muestra los mensajes de error para cada
campo en la vista. No obstante mensajes_error_para realiza su tarea
correctamente, genera un mensaje indicando que no se ha podido
almacenar.
Siguiendo el procedimiento encontrado aqui [1] :
Primeramente redefino el array que utiliza ActiveRecord, y además
nuestra versión de error_messages_for, creando un archivo en
lib/traduccion_validaciones.rb :
module ActiveRecord
class Errors
begin
@@default_error_messages = {
:inclusion => “Es obligatorio”,
:exclusion => “Es campo reservado”,
:invalid => “No es válido”,
:confirmation => “No coincide la confirmación”,
: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 existe”,
:not_a_number => “No es un número”
}
end
end
end
module ActionView
module Helpers
module ActiveRecordHelper
def mensajes_error_para (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
crearse”))
end
end
end
end
end
Siguiendo con el procedimiento, invocamos el código anterior en
config/environment.rb, antes de invocar Rails::Initializer :
require File.join(File.dirname(FILE), ‘boot’)
require ‘traduccion_validaciones’
Rails::Initializer.run do |config|
.
.
.
En _form.rhtml en la vista :
<%= mensajes_error_para ‘cuenta’ %>
<%= error_message_on(:cuenta, :banco) %>Banco
<%= text_field 'cuenta', 'banco' %>
<%= error_message_on(:cuenta, :banco) %>Tipo
<%= text_field 'cuenta', 'tipo' %>
En el modelo :
class Cuenta < ActiveRecord::Base
validates_presence_of :banco, :tipo
end
[1] http://sobrerailes.com/articles/2006/03/18/sudoku-on-rails-v6
Gracias.
Jaime Mora R.