Forum: Italian Ruby user group Field personalizzabili in error_messages_for

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
F514a744c5dc71c2a67e0f10023efaa8?d=identicon&s=25 Davide Spaggiari (spaggio)
on 2008-11-27 16:32
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.
26ff3eb6e9a81f6a9b55c9bcf4fab661?d=identicon&s=25 Claudio Fiorini (Guest)
on 2008-11-27 16:49
(Received via mailing list)
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
F514a744c5dc71c2a67e0f10023efaa8?d=identicon&s=25 Davide Spaggiari (spaggio)
on 2008-11-27 17:27
Claudio Fiorini 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 ?
26ff3eb6e9a81f6a9b55c9bcf4fab661?d=identicon&s=25 Claudio Fiorini (Guest)
on 2008-11-27 17:42
(Received via mailing list)
On Thu, 2008-11-27 at 17:27 +0100, Davide Spaggiari wrote:
> Claudio Fiorini 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
&egrave; 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.
F514a744c5dc71c2a67e0f10023efaa8?d=identicon&s=25 Davide Spaggiari (spaggio)
on 2008-11-27 17:50
Si vabbè ma così posso impostare una sola tipologia di errore per ogni
campo... Esiste un modo un po' più pratico ?
26ff3eb6e9a81f6a9b55c9bcf4fab661?d=identicon&s=25 Claudio Fiorini (Guest)
on 2008-11-27 18:00
(Received via mailing list)
On Thu, 2008-11-27 at 17:50 +0100, Davide Spaggiari 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!
F514a744c5dc71c2a67e0f10023efaa8?d=identicon&s=25 Davide Spaggiari (spaggio)
on 2008-11-27 18:32
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 ?
8ae7f93e6bb17053070baaef18e4d379?d=identicon&s=25 Michele Franzin (Guest)
on 2008-11-27 19:07
(Received via mailing list)
On Thu, Nov 27, 2008 at 6:32 PM, Davide Spaggiari
<davidespaggiari@gmail.com> 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
1236781f7a3ca26f5ce8e840daf33797?d=identicon&s=25 Piccini Roberto (Guest)
on 2008-11-28 08:22
(Received via mailing list)
ciao,
se ho ben capito il tuo problema dovresti usare il plugin Human
Attribute Override
http://agilewebdevelopment.com/plugins/human_attri...



On Thu, Nov 27, 2008 at 4:32 PM, Davide Spaggiari
8768bcdbda1adf80e4da6744268868af?d=identicon&s=25 Pietro Giorgianni (giorgian)
on 2008-11-28 08:34
(Received via mailing list)
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.
This topic is locked and can not be replied to.