Rails 4数值验证文本提交时不会引发错误

时间:2016-04-25 16:50:14

标签: ruby-on-rails forms postgresql validation ruby-on-rails-4

我有一个Rails 4表单,它使用simple_form gem和Postgres作为DBMS来保存嵌套关联。表单中保存的其中一个模型有2个数字输入字段。这些字段的验证规则如下:

validates_numericality_of :field1, greater_than: 0, only_integer: true, allow_nil: true
validates_numericality_of :field2, allow_nil: true

如果我在这些字段中键入“十”或“三十五”或“$$$$$”等字符串,则不会出现验证错误,表单数据会被保存,并且这些字段会被赋予{{1}价值。如果我将负值或十进制值放入nil,则会显示预期的验证错误。

虽然这不太可能对使用此表单的管理员造成大量问题,但我似乎无法解释为什么会发生这种情况。此表单的所有其他验证均按预期工作。

为什么这些值会转换为field1?为什么我没有得到非数字验证错误?这只是nil财产的一个恼人的怪癖吗?

1 个答案:

答案 0 :(得分:1)

根据documentation,当您设置only_integer: true时,您的值适用于正则表达式/\A[+\-]?\d+\Z/

"123" =~ /\A[+\-]?\d+\Z/
#=> 0
"$$$$$" =~ /\A[+\-]?\d+\Z/
#=> nil