validar rails formularios campos asociaciones anidados ruby-on-rails ruby

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