2012-03-13 103 views
0

我有这个验证:为什么Chrome跳过数字验证?

validates :year, :presence => true, :numericality => { :only_integer => true }, :uniqueness => true 

这在Firefox罚款,但在Chrome中numericality验证是行不通的。如果我写23ab保存为23并且不显示错误。可以因为HTML5的标签输入类型数量?

回答

1

检查您的操作实际收到的参数(即检查您的development.log),并发布有关params哈希中实际发送到控制器的信息。

模型中的验证发生在服务器端,在浏览器发送表单数据之后,在数据库中保存/更新之前发生。因此,如果来自两个不同浏览器的完全相同的输入产生不同的验证结果,那么它可能在浏览器被控制器动作接收之前进行修改。

换句话说:它不是被跳过的验证,而是输入数据被修改,至少是最有可能的。检查什么是实际制作到你的params散列,你会在半路回家。

+0

你说得对,必须是Chrome的默认行为。在发送表单之前,我会写入'2a'并在输入之外单击并自动转到'2'。 – josebailo 2012-03-13 19:39:51

+0

Rails还可能自动生成某些Chrome浏览器在该字段上响应的元数据(?因为您的验证?),该元数据会被馈送到视图中,导致它在发送之前对其进行格式化?只是一种预感,但如果能做到这一点,会很酷。 – jefflunt 2012-03-13 21:36:35