我有一个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
财产的一个恼人的怪癖吗?
答案 0 :(得分:1)
根据documentation,当您设置only_integer: true
时,您的值适用于正则表达式/\A[+\-]?\d+\Z/
:
"123" =~ /\A[+\-]?\d+\Z/
#=> 0
"$$$$$" =~ /\A[+\-]?\d+\Z/
#=> nil