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?

¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top