2012-04-26 22 views
9

Ho un validatore personalizzato e sto cercando di emettere un messaggio di errore quando fallisce ma non sono riuscito a farlo. Qualcuno potrebbe dirmi se sto facendo questo nel posto giusto.Aggiunta di un messaggio di errore a un validatore personalizzato

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 

ho avuto modo seguente:

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

Ma è stata la ricezione di un errore

Unknown validator: 'MessageValidator' 

E quando ho cercato di mettere il messaggio alla fine del validatore la virgola separa la has_association? trasformato il punto interrogativo e virgola arancione

risposta

17

Il message e if parametri dovrebbero essere all'interno di un hash per presence:

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

Questo perché è possibile caricare più convalide in una sola riga:

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

Se si è tentato di aggiungere un messaggio in questo modo o in una condizione if, Rails non saprebbe quale validazione applicare al messaggio/condizionale. Quindi, è necessario impostare la convalida del messaggio:

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

Non è necessario includere la dichiarazione vera in presenza? Quando faccio questo il? e la fine dell'hash stanno correndo insieme ed entrambi diventano arancione. – Jay

+0

Solo bisogno di mettere lo spazio, grazie per il vostro aiuto Dylan molto apprezzato :) – Jay

+0

Come accetto? – Jay

Problemi correlati