Tengo un rieles modelo que dispone de 7 atributos numéricos rellenados por el usuario a través de un formulario.
Necesito validar la presencia de cada uno de estos atributos, que es, obviamente, fácil de usar
validates :attribute1, :presence => true
validates :attribute2, :presence => true
# and so on through the attributes
Sin embargo, yo también necesita ejecutar un validador personalizado que toma un número de los atributos y hace algunos cálculos con ellos. Si el resultado de estos cálculos no se encuentra dentro de un cierto rango, a continuación, el modelo debe ser declarada nula.
En es propio, esto es demasiado fácil
validate :calculations_ok?
def calculations_ok?
errors[:base] << "Not within required range" unless within_required_range?
end
def within_required_range?
# check the calculations and return true or false here
end
Sin embargo, el problema es que el método de "validar" siempre se ejecuta antes de que el método de "valida". Esto significa que si el usuario sale de uno de los campos en blanco, rieles tira un error cuando se intenta hacer un cálculo con un espacio en blanco atributo.
Entonces, ¿cómo puedo verificar la presencia de todos los atributos necesarios en primer lugar?