2012-03-24 14 views
5

używam client_side_validations gem przeprowadzić walidację formularza w szynach 3.szyny 3: client_side_validations rzucanie alertu działa unikatowy walidacji

Wszystko działa poprawnie z wyjątkiem gdy firefox/ie rzuca javascript alert gdy unikatowe działa Ajax i walidacji Zwróć komunikat o błędzie 404.

Autorka mówi 404 oznacza rekord nie został znaleziony, a zatem wyjątkowy;

Czy istnieje jakiś sposób możemy sobie z tym poradzić.

Otworzyłem ten w: https://github.com/bcardarella/client_side_validations/issues/297

Odpowiedz

5

Błąd widzisz dlatego zdalne sprawdzanie poprawności nie może znaleźć zasobu na serwerze. Oczekuje się, że jeśli zasób nie zostanie znaleziony, zasób jest unikalny.

Chociaż myślę, że to jest semantycznie poprawny kod stanu, aby wrócić i nie sądzę przeglądarek należy pokazywanie błędów dla tego ja wyraźnie stracić. Tak więc w następnej wersji ClientSideValidations będę zmienia to zachowanie zwraca kod statusu w zakresie 2xx. Przepraszam za zamieszanie.

+1

myślę, że będzie wielki ... proszę toczyć ją wkrótce .. – dbKooper

+0

żadnych ram czasowych tego naprawić? Widzę także błędy w konsoli chrome. – plainjimbo

+0

"wkrótce"? W tej chwili jestem całkiem zatopiony. Wiem, że to kiepska odpowiedź, przepraszam :( – bcardarella

0

miałem ten sam problem, co spowodowało pewne problemy jak stosowanie pracuję nad ma globalnych wiadomości tosty, które pojawią się na błędach, takich jak 404 na rozmowy AJAX.

Skoro tak, zrobiłem tę poprawkę. Z pewnością możesz zrobić więcej. Dobrym pomysłem byłoby na przykład zmienić działanie javascript, ale ta łatka małpa jest najmniejszą zmianą, jaką mogę wprowadzić do kodu i nadal uzyskać wymaganą funkcjonalność. Należy pamiętać, że używa się HTTP 204, ponieważ gem ClientSideValidations oczekuje, że wszystkie odpowiedzi HTTP 200 (bardzo dokładnie 200) będą walidacją nieudanych odpowiedzi, a zatem nie będzie można ich ponownie wykorzystać bez zmiany javascript.

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