2012-03-24 10 views
5

sto usando client_side_validations gemma di eseguire una validazione dei form in rotaie 3.rotaie 3: client_side_validations lancio avviso esecuzione convalida unica

tutto funziona bene, tranne quando il firefox/ie getta javascript avviso quando uniche piste validazione AJAX e restituire il messaggio di errore 404.

L'autore dice che un 404 significa record non trovato e quindi unico;

C'è un modo per gestirlo.

ho aperto questo: https://github.com/bcardarella/client_side_validations/issues/297

risposta

5

L'errore che state vedendo è perché la convalida remota non riesce a trovare la risorsa sul server. Questo è previsto, se la risorsa non viene trovata la risorsa è unica.

Mentre penso che questo sia il codice di stato semanticamente corretto da restituire e non penso che i browser debbano mostrare errori per questo, ho chiaramente intenzione di perdere. Quindi nella prossima versione di ClientSideValidations cambierò questo comportamento per restituire un codice di stato nell'intervallo 2xx. Dispiace per la confusione.

+1

Penso che sarà grande ... Per favore stendetela presto .. – dbKooper

+0

qualsiasi lasso di tempo su questa correzione? Vedo anche errori nella console di Chrome. – plainjimbo

+0

"soonish"? Sono abbastanza sommerso al momento. So che è una risposta zoppa, mi dispiace :( – bcardarella

0

Ho avuto lo stesso problema che ha causato alcuni problemi in quanto l'applicazione su cui sto lavorando ha messaggi di toast globali che vengono fuori per errori come 404 su chiamate Ajax.

Stando così le cose, ho creato questa patch. Puoi certamente fare di più. Ad esempio, sarebbe una buona idea cambiare il modo in cui funziona il javascript, ma questa patch per le scimmie è il minimo cambiamento che potrei apportare al codice e ottenere comunque la funzionalità richiesta. Notare che HTTP 204 viene utilizzato perché la gem di ClientSideValidations prevede che tutte le risposte HTTP 200 (in particolare 200) siano risposte non riuscite e, pertanto, non possono essere riutilizzate senza modificare anche il javascript.

app/config/inizializzatori/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