2016-04-25 49 views
1

我有一个Rails 4表格,它保存了嵌套关联,使用simple_form gem和Postgres作为DBMS。表格中保存的模型之一具有2个数字输入字段。对于这些领域的验证规则如下:Rails 4数值验证不投掷错误提交文本

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

如果键入像“十”或“35”或“$$$$$”进入这些领域的字符串,发生任何验证错误,形式数据被保存,并且这些字段的值为nil。如果我在field1中输入负值或十进制值,则会显示预期的验证错误。

虽然这不太可能导致使用此表单的管理员出现大量问题,但我似乎无法解释为何发生这种情况。所有其他此表单的验证按预期工作。

为什么这些值转换为nil?为什么我不会收到非数字验证错误?这仅仅是allow_nil属性的一个恼人的怪癖吗?

回答

1

documentation,当你设置only_integer: true,你的价值将正则表达式/\A[+\-]?\d+\Z/

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

感谢您的答复。这并不能解释为什么没有'only_integer'的第二个字段表现出相同的确切行为。我可以在第二个字段中输入“string”,它会被设置为“nil”并保存,而不是无法保存并显示错误。 – Todd