2012-04-26 29 views
9

Tengo un validador personalizado y estoy tratando de dar salida a un mensaje de error cuando falla pero no he podido hacerlo. ¿Podría alguien decirme por favor si estoy haciendo esto en el lugar correcto?Agregar un mensaje de error a un validador personalizado

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 

lo tenía la siguiente manera:

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

Pero estaba recibiendo un error

Unknown validator: 'MessageValidator' 

Y cuando traté de poner el mensaje al final del validador de la coma que separa la has_association? convertido el signo de interrogación y coma anaranjada

Respuesta

17

El message y if parámetros deben estar dentro de un hash para presence:

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

Esto es porque se puede cargar varias validaciones en una sola línea:

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

Si intentas agregar un mensaje a eso de la forma en que lo hiciste, o una condición if, Rails no sabría a qué validación aplicar el mensaje/condicional. Entonces, en su lugar, debe configurar el mensaje por validación:

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

¿No es necesario que incluya la declaración verdadera en presencia? Cuando hago esto el? y el final del hash se ejecuta en conjunto y ambos se vuelven anaranjados. – Jay

+0

Solo necesitaba poner el espacio, gracias por su ayuda, Dylan lo apreció mucho :) – Jay

+0

¿Cómo acepto? – Jay

Cuestiones relacionadas