ruby on rails - rails - ¿Cómo escribo un método de validación personalizado con parámetros para mi modelo ActiveRecord?
rails asociaciones (2)
En mi modelo tengo:
validate :my_custom_validation
def my_custom_validation
errors.add_to_base("error message") if condition.exists?
end
Me gustaría agregar algunos parámetros a mycustomer vaildation de esta manera:
validate :my_custom_validation, :parameter1 => x, :parameter2 => y
¿Cómo escribo la función mycustomvalidation para dar cuenta de los parámetros?
Puedes 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 es necesario llamarlo para referenciarlo, ya que creo que el método de validación se procesa (si existe) después de cualquier validates_uniqueness_of-like validations.
Agregado: Más información en los documentos de API de Rails aquí .
Los validadores suelen tener un parámetro de matriz que indica, primero, los campos para validar y, por último (si existe), un hash con las opciones. En tu ejemplo:
:my_custom_validation, parameter1: x, parameter2: y
: my_custom_validation sería un nombre de campo, mientras que parameter1: x, parameter2: y sería un hash:
{ parameter1: x, parameter2: y}
Por lo tanto, harías 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