rails 3: client_side_validations выдает предупреждение при запуске уникальной проверки - PullRequest
5 голосов
/ 25 марта 2012

Я использую гем client_side_validations для проверки формы в rails 3.

все работает нормально, кроме случаев, когда firefox / ie выдает предупреждение javascript когда запускается уникальная проверка ajax и выдается сообщение об ошибке 404.

Автор говорит, что 404 означает, что запись не найдена и, следовательно, уникальна;

Есть ли способ справиться с этим.

Я открыл это в: https://github.com/bcardarella/client_side_validations/issues/297

Ответы [ 2 ]

5 голосов
/ 07 апреля 2012

Вы видите ошибку, потому что удаленная проверка не может найти ресурс на сервере. Это ожидается, если ресурс не найден, ресурс является уникальным.

Хотя я думаю, что это семантически правильный код состояния, который нужно вернуть, и я не думаю, что браузеры должны показывать ошибки из-за этого, я явно проиграю. Поэтому в следующей версии ClientSideValidations я буду изменять это поведение, чтобы возвращать код состояния в диапазоне 2xx. Извините за путаницу.

0 голосов
/ 25 октября 2016

У меня была та же проблема, которая вызвала некоторые проблемы, так как приложение, над которым я работаю, имеет глобальные всплывающие сообщения с сообщениями об ошибках, таких как 404 при вызовах ajax.

В этом случае я сделал этот патч,Вы, конечно, можете сделать больше.Например, было бы неплохо изменить работу javascript, но этот «обезьяний патч» - это наименьшее изменение, которое я могу внести в код, и при этом получить необходимую функциональность.Обратите внимание, что HTTP 204 используется, потому что гем ClientSideValidations ожидает, что все ответы HTTP 200 (в частности, 200) будут ошибочными ответами проверки, и поэтому не могут быть повторно использованы без изменения javascript.

app / config / initializers / 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
...