Utilice una lambda, pero al menos en las versiones más recientes de Rails, ActiveRecord intentará pasar dos parámetros a esa lambda, y necesita dar cuenta de ellos. Utilizando un ejemplo sencillo, supongamos que queremos asegurar un nombre de usuario sólo contiene caracteres alfanuméricos:
validates_format_of :username, :with => /^[a-z0-9]+$/i,
:message => lambda{|x,y| "must be alphanumeric, but was #{y[:value]}"}
El primer parámetro pasado a la lambda es un no tan pequeño símbolo extraño que sería grande para decirle a un robot lo salieron mal:
:"activerecord.errors.models.user.attributes.username.invalid"
(En caso de que usted está confundido por la notación anterior, los símbolos pueden contener más que sólo letras, números y guiones bajos, pero si lo hacen, usted tiene que poner comillas alrededor de ellos porque de lo contrario. :activerecord.errors
parece que está intentando llamar al método .errors
en una llamada de símbolo ed :activerecord
.)
El segundo parámetro contiene un hash con los campos que le ayudarán a "actualizar" la respuesta de error. Si trato de agregar un nombre de usuario con signos de puntuación como "¡Superestrella!", Se verá algo como esto:
{
:model=>"User",
:attribute=>"Username",
:value=>"Superstar!!!"
}
Supongo que 'evento' es otra clase de modelo activo? –
Solo por ejemplo. no en el proyecto real – murato