Tengo un formulario con 3 campos de ActiveRecord. Uno de esos campos tiene un tipo de ridículo y requisitos de validación DEPENDIENTES DEL ESTADO. (Por ejemplo, solo valido el campo si el objeto se está creando en un formulario de asistente de configuración.)cómo puede un controlador establecer manualmente errores de validación para un campo determinado
En mi controlador POST para crear el objeto, pensé que podría llamar a errors.add para insertar una condición de error especial
@foo = Foo.new(params[:foo])
if goofy_conditions(params[:foo][:goofy_field])
@foo.errors.add(:goofy_field, "doesn't meet the goofy conditions")
end
respond_to do |format|
if @foo.save
...
else
... redirect back to form (with error fields hilited)
Sin embargo, hacer @ foo.errors.add() en el controlador no parece hacer nada ... no impide el guardado() si los otros campos pasan validaciones.
Una alternativa es poner un controlador de validación personalizado en el modelo ... Sé usar errors.add (: campo, 'msg') funciona bien allí ... pero en ese caso, ¿cómo puede mi controlador 'pasar' información al validador que indica si el campo debe ser validado o no.
poner un attrbute nonpersisted en el modelo, por ejemplo asistente, establecer según corresponda y luego solo usarlo en la validación inicial –