Field personalizzabili in error_messages_for


#1

Salve ragazzi, ho un problemino da risolvere.

Avrei bisogno di personalizzare i nomi dei campi che compaiono nel
messaggio error_messages_for. Ad esempio il campo “name” deve essere
visualizzato come “argomento”.

In pratica mi serve una specie di “alias” per il nome del campo.
E’ possibile impostarlo direttamente nel metodo validate_xxx (così come
per il messaggio di errore :message) ?

Per validazioni fatte da me forse saprei anche riuscirci (tramite
parametro), ma qualcuno sa come farlo per i metodi classici ??
(validate_presence_of, validate_uniqueness_of, etc…)

Grazie per l’attenzione.


#2

hai provato a vedere error_message_on su http://api.rubyonrails.org
e’ specifico per ogni singolo field, e per modificare i messaggi
devi andare nel modello ed usare :msg nei validates oppure modificare
l’hash con tutti gli errori di validates standard di rails


#3

Claudio F. wrote:

hai provato a vedere error_message_on su http://api.rubyonrails.org
e’ specifico per ogni singolo field, e per modificare i messaggi
devi andare nel modello ed usare :msg nei validates oppure modificare
l’hash con tutti gli errori di validates standard di rails

Si ma io devo farlo per validate_presence_of, quindi non saprei proprio
come fare… Devo fare un overload del metodo validate_presence_of ?


#4

On Thu, 2008-11-27 at 17:27 +0100, Davide S. wrote:

Claudio F. wrote:

hai provato a vedere error_message_on su http://api.rubyonrails.org
e’ specifico per ogni singolo field, e per modificare i messaggi
devi andare nel modello ed usare :msg nei validates oppure modificare
l’hash con tutti gli errori di validates standard di rails

Si ma io devo farlo per validate_presence_of, quindi non saprei proprio
come fare… Devo fare un overload del metodo validate_presence_of ?
mettiamo caso che ci sia una tabella products in database, quindi avrai
un modello product.rb con all’interno il controllo sulla obbligatorieta’
per la colonna name che pero’ tu visualizzi come ‘argomento’:

class Product < ActiveRecord::Base
validates_presence_of :name, :message => “Campo…obbligatorio”
end

nella file rhtml della form avrai l’input field per il campo name:
Argomento: <%= text_field :product, :name %>

ora se tu prima del text_file inserisci:
<%= error_message_on :product, :name, :prepend_text => “Argomento
è un”, :css_class => ‘nomeClasseCss’ %>

succedera’ che ad un submit se il field argomento non e’ stato inserito
uscira’ la scritta sopra il campo con il css da te assegnato e con la
scritta di tuo piacimento.


#5

Si vabbè ma così posso impostare una sola tipologia di errore per ogni
campo… Esiste un modo un po’ più pratico ?


#6

Mi sa che non ci siamo capiti: io devo usare error_messages_for, perchè
ho già stilizzato la maschera di errore standard dello scaffold.

Come posso fare ?


#7

On Thu, 2008-11-27 at 17:50 +0100, Davide S. wrote:

Si vabbè ma così posso impostare una sola tipologia di errore per ogni
campo… Esiste un modo un po’ più pratico ?

no!
tu puoi avere:

validates_presence_of :name, :message => “…”
validates_length_of :name, :in => 6…12, :message => “…”
validates_numericality_of :name, :message => “…”

e vengono tutte eseguite e vedrai i vari msg per quelle false

Poi se necessiti di un controllo particolare e pensi di poterlo fare con
una solo regexp allora usi:
validates_format_of :name, :with => //, :message => “…”

poi se il tuo e’ un caso ultra particolare allori usi before_save
sempre nel modello:

before_save :verify_name

def verify_name
if self.name == nil
errors.add(“Argomento non presente”)
end

oppure senza usare before_save setti la funzione validate
def validate
end
che viene eseguita in qualsiasi operazione, sia di create ed update…

a te la scelta!


#8

On Thu, Nov 27, 2008 at 6:32 PM, Davide S.
removed_email_address@domain.invalid wrote:

Mi sa che non ci siamo capiti: io devo usare error_messages_for, perchè
ho già stilizzato la maschera di errore standard dello scaffold.

Come posso fare ?

che versione di rails usi?
usi già qualche plugin per la localizzazione?

michele


#9

ciao,
se ho ben capito il tuo problema dovresti usare il plugin Human
Attribute Override
http://agilewebdevelopment.com/plugins/human_attribute_override

On Thu, Nov 27, 2008 at 4:32 PM, Davide S.


#10

ciao, io uso il plugin Globalite su rails 2.1; quello che fa è
ridefinire ActiveRecord::Error::full_messages

alla peggio potresti farlo anche tu, usando un qualche hash tipo
{:name => “Argomento”, …}, definito magari dentro il singolo model,
e in full_messages semplicemente sostituisci il nome del campo col
valore dell’hash.