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.
Davide S. (Guest)
on 2008-11-27 17: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.
Claudio F. (Guest)
on 2008-11-27 17: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
Davide S. (Guest)
on 2008-11-27 18:27
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 ?
Claudio F. (Guest)
on 2008-11-27 18:42
(Received via mailing list)
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
&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.
Davide S. (Guest)
on 2008-11-27 18:50
Si vabbè ma così posso impostare una sola tipologia di errore per ogni
campo... Esiste un modo un po' più pratico ?
Claudio F. (Guest)
on 2008-11-27 19:00
(Received via mailing list)
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!
Davide S. (Guest)
on 2008-11-27 19: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 ?
Michele F. (Guest)
on 2008-11-27 20:07
(Received via mailing list)
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
Piccini R. (Guest)
on 2008-11-28 09: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 S.
Pietro G. (Guest)
on 2008-11-28 09: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.