2012-09-03 22 views
5

everyone!Ruby on Rails I18n interpolation

Tengo una pequeña validación para mi campo de nombre de usuario, que debe tener entre 4 y 30 caracteres. Escribí una validación: :length => { :within => 4..30, :message => I18n.t('activerecord.errors.range') - Quería mostrar un solo mensaje de error para todo tipo de errores (No como, demasiado_long o demasiado_short), pero aquí está la pregunta: ¿puedo pasar tanto valores mínimos como máximos a la traducción, para tener algo como : El nombre de usuario debe tener entre 4 y 30 caracteres. Actualmente tengo: range: "should be between %{count} and %{count} characters", que obviamente no funciona (lo hice solo para verificar).

¿Es posible obtener estos valores del rango?

Gracias a todos por sus consejos!

Respuesta

9

Puede pasar variable personalizada a traducir i18n método (o su abreviatura - t):

I18n.t('activerecord.errors.range', :min => 4, :max => 30) 

continuación, puede utilizar ellos dentro de su plantilla de cadena con% {min} y {% máx}.

No lo sacan del rango automáticamente, pero esto es lo más parecido que se me ocurre.

+0

¡Yay! Lo tengo:: length => {: within => a = (4..30),: message => I18n.t ('activerecord.errors.range', : min => a.min,: max = > a.max)} ¡Gracias por la idea! :) Espero que esto sea útil para alguien. – Dmitri