我正在使用client_side_validations gem在rails 3中执行表单验证。
一切正常,除非firefox / ie抛出javascript警报 当唯一验证ajax运行并返回404错误消息时。
作者说,404表示未找到记录,因此是唯一的;
我们有什么方法可以解决这个问题。
我已在https://github.com/bcardarella/client_side_validations/issues/297
中打开此内容答案 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