Rails模型验证在整数大数字输入上失败("超出范围")

时间:2015-02-27 08:50:43

标签: ruby-on-rails validation integer

我的模型中有Integer属性,我需要后端验证(它应该最多只有7个digts)。 在我的模型中,我做了一些验证,如:

validates :duration, format: { with: /([0-9]{1,7})/ }
validates :duration, numericality: { less_than_or_equal_to: 9999999 }

当我尝试将字母放入表单时(它返回'不是数字'错误),当我输入有效整数时效果很好(11045555 - 返回'必须小于或者等于9999999')但是当我输入非常大的数字时它会崩溃 - 让我们说11045555766666666666。错误是" 11045555766666666666超出ActiveRecord :: Type :: Integer的范围,限制为4&#34 ;

当用户输入那个大号码时,如何跳过此崩溃?

我使用mysql2 DB。

1 个答案:

答案 0 :(得分:3)

您必须在迁移文件中声明限制。默认情况下,整数以4个字节编码,因此限制为2147483647

如果您想设置更大的限制,请将其声明为

add_column :yourtable, :duration, :integer, :limit => 8

8个字节的限制为9223372036854775807

只需查看How to specify the size of an integer in the migration script

即可