rails 3:client_side_validations在运行唯一验证时抛出警报

时间:2012-03-24 20:07:44

标签: ruby-on-rails-3 client-side-validation

我正在使用client_side_validations gem在rails 3中执行表单验证。

一切正常,除非firefox / ie抛出javascript警报 当唯一验证ajax运行并返回404错误消息时。

作者说,404表示未找到记录,因此是唯一的;

我们有什么方法可以解决这个问题。

我已在https://github.com/bcardarella/client_side_validations/issues/297

中打开此内容

2 个答案:

答案 0 :(得分:5)

您看到的错误是因为远程验证无法在服务器上找到资源。这是预期的,如果找不到资源,则资源是唯一的。

虽然我认为这是返回语义正确的状态代码,但我不认为浏览器应该为此显示错误,我显然会丢失。因此,在下一版本的ClientSideValidations中,我将更改此行为以返回2xx范围内的状态代码。对不起,感到困惑。

答案 1 :(得分:0)

我遇到了同样的问题导致了一些问题,因为我正在处理的应用程序具有全局Toast消息,这些消息会出现错误,例如ajax调用上的404.

就是这样,我做了这个补丁。你当然可以做得更多。例如,改变javascript的工作原理是一个好主意,但这个猴子补丁是我可以对代码做出的最小改变,仍然可以获得所需的功能。请注意,使用HTTP 204是因为ClientSideValidations gem期望所有HTTP 200(非常特别是200)响应都是验证失败的响应,因此,如果不更改javascript,则无法重复使用。

应用程序/配置/初始化/ 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