Rails模型的长度和数值验证不接受以零开头的数字

时间:2014-08-19 05:24:53

标签: ruby-on-rails validation

我的表格中有字段zip_code。我已在相应模型中为字段提供了验证,如下所示:

validates :zip_code, :length => { :minimum => 5, :maximum => 6 }, :numericality => true, allow_blank: true

该字段是表中的整数。当我尝试输入'01234'之类的值时,它不接受它并给出如下错误:

zip code is too short (minimum is 5 characters)

如果有人能够解决这个问题,那将会非常有帮助。

2 个答案:

答案 0 :(得分:5)

你知道, zip_code 不应该是一个数字。它应该是一个格式为数字的字符串。就像您在问题中评论过的人一样,您需要将zip_code列更改为字符串类型。为它写一个新的迁移:

rails g migration change_model_zip_code_type 

然后在迁移中:

def change
  change_column :my_table, :zip_code, :string
end

然后输入您的控制台:

rake db:migrate

现在您可以将邮政编码验证为数字字符串:

validates :zip_code, :length => { :minimum => 5, :maximum => 6 }, :format => { with: /[0-9]+/ }

答案 1 :(得分:2)

您可以尝试使用以下代码:

validates_length_of :zip_code, :in => 5..6, :allow_blank => true