2010-09-20 13 views
5

Neden Rails 3'te aşağıdakilerin çalışmadığını anlamıyorum 3. "Tanımlanmamış yerel değişken veya" custom_message "yöntemi hatası alıyorum. Raylar 3: Doğrulamada özel hata iletisi

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

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

Ben de kullanarak çalıştı: mesaj =>: custom_message yerine hiçbir şans ile rails-validation-message-error yazı dile getirildiği gibi.

:

Modeli:

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

kimse Problemimin aşağıdaki çözüm geldi ilgileniyorsa

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

Hatanızı tam kodunuzu kullanarak çoğaltabilirim ancak önerdiğiniz gibi ': message =>: custom_message 'olarak değiştirdiğimde hata gider. – Dusty

cevap

1

: email_format lib klasöründe bulunan özel bir doğrulayıcı olduğunu 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

Belki de "custom_message" yönteminin validasyonun üstünde tanımlanması gerekir.

1

Sadece referans olarak, devam ettiğine inanıyorum. 'Doğrulama' yöntemi, bir sınıf yöntemidir, yani MyModel.validates(). Bu paramları 'doğrulamak' ve 'custom_message' olarak adlandırdığınızda, aslında MyModel.custom_message'i çağırıyorsunuz. Yani doğrular çağrısı önce tanımlanmış self.custom_message ile

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

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

gibi bir şey gerekir.