2008-09-19 7 views
12

En mi modelo que tengo:¿Cómo escribo un método de validación personalizado con parámetros para mi modelo ActiveRecord?

validate :my_custom_validation 

def my_custom_validation 
errors.add_to_base("error message") if condition.exists? 
end 

Me gustaría añadir algunos parámetros para mycustomer vaildation así:

validate :my_custom_validation, :parameter1 => x, :parameter2 => y 

¿Cómo se escribe la función mycustomvalidation para dar cuenta de los parámetros?

Respuesta

6

Los validadores generalmente tienen un parámetro de matriz que indica, primero, los campos para validar y, por último (si existe) un hash con las opciones. En su ejemplo:

:my_custom_validation, parameter1: x, parameter2: y 

: my_custom_validation sería un nombre de campo, mientras que parametro1: x, parámetro2: y sería un hash:

{ parameter1: x, parameter2: y} 

Por lo tanto, usted haría algo como:

def my_custom_validation(*attr) 
    options = attr.pop if attr.last.is_a? Hash 
    # do something with options 
    errors.add_to_base("error message") if condition.exists? 

end 
2

Usted sólo puede hacer algo como esto:

def validate 
    errors.add('That particular field', 'can not be the value you presented') if !self.field_to_check.blank? && self.field_to_check == 'I AM COOL' 
end 

No hay necesidad de llamar referencia a él, ya que creo que se procesa el método de validación (si existe) después de cualquier validates_uniqueness_of -como validaciones.

Agregado: más información en los documentos de la API de Rails here.

Cuestiones relacionadas