Rails验证:如何正确验证数字字段上的无效非数字输入?

时间:2017-09-18 17:37:28

标签: ruby-on-rails validation

ActiveRecord显然会识别是否为数字字段(如整数或小数)指定了非数字输入。在这些情况下,该值将转换为0(如果是十进制字段,则为0.0)。由于这是在验证之前发生的,因此用于检测下面给出的非数字字符的正则表达式验证将不起作用。

validates :fee, presence: true, format: { with: /\A\d{0,11}(\.?\d{0,2})?\z/ }

如果给出值'a',它将作为0保存到数据库,并且不会返回任何验证错误。虽然在许多情况下这是可以接受的,但理想的是检测无效输入并将验证错误返回给用户。

如何做到这一点?

1 个答案:

答案 0 :(得分:1)

我还没有看到任何关于此的文档,所以这里是我找到的答案:

使用numericality: true

这将返回数字字段上非数字输入的验证错误。

validates :fee, presence: true, format: { with: /\A\d{0,11}(\.?\d{0,2})?\z/ }, numericality: true

正则表达式验证器仍将正确验证任何数字输入。