2010-09-20 14 views
5

Non capisco perché ciò che segue non funziona in Rails 3. Ricevo l'errore "variabile locale o metodo" custom_message "".Rails 3: messaggio di errore personalizzato in convalida

validates :to_email, :email_format => { :message => custom_message } 

def custom_message 
    self.to_name + "'s email is not valid" 
end 

Ho anche provato ad utilizzare: message =>: custom_message invece come è stato suggerito in rails-validation-message-error posta senza fortuna.

: email_format è un validatore personalizzato si trova nella cartella lib:

class EmailFormatValidator < ActiveModel::EachValidator 
    def validate_each(object, attribute, value) 
    unless value =~ /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i 
     object.errors[attribute] << (options[:message] || 'is not valid') 
    end 
    end 
end 
+0

Posso duplicare il tuo errore usando il tuo codice esatto, ma quando lo cambio in ': message =>: custom_message' come suggerivi, l'errore scompare. – Dusty

risposta

1

Se qualcuno è interessato mi si avvicinò con la seguente soluzione al mio problema:

Modello:

validates :to_email, :email_format => { :name_attr => :to_name, :message => "'s email is not valid" } 

lib/email_format_validator.rb:

class EmailFormatValidator < ActiveModel::EachValidator 

    def validate_each(object, attribute, value) 
    unless value =~ /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i 

     error_message = if options[:message] && options[:name_attr] 
     object.send(options[:name_attr]).capitalize + options[:message] 
     elsif options[:message] 
     options[:message] 
     else 
     'is not valid' 
     end 

     object.errors[attribute] << error_message 
    end 
    end 
end 
0

Forse il metodo "custom_message" deve essere definito sopra la convalida.

1

Solo per riferimento, questo è quello che credo stia succedendo. Il metodo "validates" è un metodo di classe, ad esempio MyModel.validates(). Quando si passano questi parametri a 'validati' e si chiama 'custom_message', si sta effettivamente chiamando MyModel.custom_message. Quindi è necessario qualcosa come

def self.custom_message 
    " is not a valid email address." 
end 

validates :to_email, :email_format => { :message => custom_message } 

con self.custom_message definito prima della chiamata a convalida.

Problemi correlati