2012-09-03 6 views
5

tutti!Ruby on Rails Interpolazione I18n

Ho una piccola convalida per il mio campo nome utente, che dovrebbe essere compreso tra 4 e 30 caratteri. Ho scritto una convalida: :length => { :within => 4..30, :message => I18n.t('activerecord.errors.range') - Volevo visualizzare un singolo messaggio di errore per tutti i tipi di errori (Non mi piace troppo_long o troppo_short), ma ecco la domanda: posso passare entrambi i valori minimo e massimo alla traduzione, per avere qualcosa di simile : Il nome utente deve essere compreso tra 4 e 30 caratteri. Attualmente ho: range: "should be between %{count} and %{count} characters", che ovviamente non funziona (fatto solo per il controllo).

È possibile afferrare questi valori dall'intervallo?

Grazie a tutti in consiglio!

risposta

9

È possibile passare variabile personalizzata per i18n metodo (o la sua abbreviazione - t) tradurre:

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

quindi è possibile utilizzare all'interno del vostro modello di stringa con% {min} e {max%}.

Non lo prende automaticamente dalla gamma, ma è il più vicino possibile.

+0

Yay! Ho capito:: length => {: within => a = (4..30),: message => I18n.t ('activerecord.errors.range', : min => a.min,: max = > a.max)} Grazie per l'idea! :) Spero che questo possa essere d'aiuto a qualcuno! – Dmitri