2012-04-26 13 views
9

Ich habe einen benutzerdefinierten Validierer und ich versuche, eine Fehlermeldung auszugeben, wenn es fehlschlägt, aber nicht konnte. Kann mir bitte jemand sagen, ob ich das an der richtigen Stelle mache?Hinzufügen einer Fehlermeldung zu einem benutzerdefinierten Validierer

class User < ActiveRecord::Base 
    self.table_name = "user" 

    attr_accessible :name, :ip, :printer_port, :scanner_port 

    validates :name,  :presence => true, 
          :length => { :maximum => 75 }, 
          :uniqueness => true       

    validates :ip,   :length => { :maximum => 75 }, 
          :allow_nil => true  

    validates :printer_port, :presence => true, :if => :has_association? 

    validates :scanner_port, :presence => true, :if => :has_association?   

    def has_association? 
    ip != nil 
    end 
end 

Ich hatte es wie folgt:

validates :printer_port, :presence => true, :message => "can't be blank", :if => :has_wfm_association? 

aber erhielt einen Fehler

Unknown validator: 'MessageValidator' 

Und wenn ich das Komma die Nachricht am Ende des Prüfers zu setzen versucht seperating die has_assoziation? wandte sich das Fragezeichen und Komma Orange

Antwort

17

Die message und if Parameter innerhalb eines Hash für presence sein sollte:

validates :printer_port, :presence => {:message => "can't be blank", :if => :has_wfm_association?} 

Dies liegt daran, dass Sie mehrere Validierungen in einer einzigen Zeile laden:

validates :foo, :presence => true, :uniqueness => true 

Wenn Sie versucht haben, eine Nachricht so hinzuzufügen, wie Sie es getan haben, oder eine if Bedingung, würde Rails nicht wissen, auf welche Validierung die Nachricht/Bedingung angewendet werden soll. Stattdessen müssen Sie die Nachricht pro Validierung festlegen:

validates :foo, :presence => {:message => "must be present"}, 
       :uniqueness => {:message => "must be unique"} 
+0

Muss ich die wahre Aussage nicht in Anwesenheit enthalten? Wenn ich das mache? und das Ende des Hashes laufen zusammen und beide werden orange. – Jay

+0

Nur benötigt, um den Platz zu setzen, danke für Ihre Hilfe Dylan sehr geschätzt :) – Jay

+0

Wie akzeptiere ich? – Jay