la transformación de datos después de la validación exitosa
-
08-10-2019 - |
Pregunta
Estoy teniendo un poco de un problema de la normalización de un código UPC cadena para que pueda almacenar en el mismo formato en la base de datos.
Estoy usando la gema ean
para comprobar si la cadena es buena (que está trabajando muy bien), pero si tiro algo de código de asignación después de validar tales como:
validate :upc_check
def upc_check
if !upc.nil?
if !upc.ean?
errors.add(:upc, 'is not a valid UPC.')
else
upc = upc.strip
end
end
end
La llamada tira es sólo un ejemplo, ya que es una cadena. Voy a ser en realidad la eliminación de los guiones en la UPC.
El código anterior no funciona tan bien, ya que en realidad no salva él. Tenía un vistazo a desencadenar un método como
after_validation :normalize_upc
def normalize_upc
upc = upc.strip
end
.. pero lo anterior no funciona bien.
¿Qué hacen ustedes para validar y transformar datos después de validación?
Solución
Me haría que mi validador estricta, y luego usar un filtro before_validation hacer las transformaciones necesarias.
Otros consejos
I would recommend overriding the setter method in your model for upc and not having a separate method for normalizing it. This would be accomplished with something like:
def upc=(value)
self.upc = value.strip
end
Edit:
I would also clean up your validation method to remove this functionality like so:
validate :upc_check, :unless => lambda {|m| m.upc.nil?}
def upc_check
errors.add(:upc, 'is not valid') unless upc.ean?
end