2012-03-24 10 views
5

estoy client_side_validations Gracias a GEM para realizar una validación de formularios en los carriles 3.carriles 3: client_side_validations lanzan alerta sobre la ejecución de la validación única

todo funciona bien, excepto cuando el Firefox/IE lanza Javascript alerta cuando únicas carreras de validación Ajax y devolver mensaje de error 404.

El autor dice que 404 significa que el registro no se ha encontrado y, por lo tanto, es único;

¿Hay alguna manera de que podamos manejar esto.

He abierto esta en: https://github.com/bcardarella/client_side_validations/issues/297

Respuesta

5

El error que está viendo es debido a que la validación remota no puede encontrar el recurso en el servidor. Esto es esperado, si el recurso no se encuentra el recurso es único.

Si bien creo que este es el código de estado semánticamente correcto para devolver y no creo que los navegadores muestren errores para esto, claramente voy a perder. Por lo tanto, en la próxima versión de ClientSideValidations cambiaré este comportamiento para devolver un código de estado en el rango 2xx. Perdón por la confusion.

+1

Creo que va a ser grande ... Por favor extenderla pronto .. – dbKooper

+0

cualquier período de tiempo en esta revisión? También veo errores en la consola de Chrome. – plainjimbo

+0

"soonish"? Estoy bastante abrumado en este momento. Sé que es una respuesta poco convincente, lo siento :( – bcardarella

0

Tuve el mismo problema que causó algunos problemas ya que la aplicación en la que estoy trabajando tiene mensajes de brindis globales que aparecen para errores tales como 404 en llamadas ajax.

Siendo ese el caso, hice este parche. Sin duda puedes hacer más. Sería una buena idea, por ejemplo, cambiar la forma en que funciona el javascript, pero este parche mono es el cambio más pequeño que podría hacerle al código y aún así obtener la funcionalidad requerida. Tenga en cuenta que se utiliza el HTTP 204 porque la gema ClientSideValidations espera que todas las respuestas HTTP 200 (muy específicamente 200) sean respuestas con fallas de validación y, por lo tanto, no podrían reutilizarse sin cambiar también el javascript.

app/config/inicializadores/client_side_validations.rb

ClientSideValidations::Config.disabled_validators = [] 

# Monkey Patch 

# Guranatee uniqueness middleware is fully loaded 
::ClientSideValidations::Middleware::Uniqueness 

module ClientSideValidations 
    module Middleware 
    class Uniqueness 
     def response 
     begin 
      if unique? 
      self.status = 204 # changed from 404 
      self.body = '' # changed from true 
      else 
      self.status = 200 
      self.body = 'false' 
      end 
     rescue NotValidatable 
      self.status = 500 
      self.body = '' 
     end 
     super 
     end 
    end 
    end 
end 
Cuestiones relacionadas