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



我有字段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)

如果有人能给这个问题一些启发就太有帮助了

你看,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]+/ }

可以试试下面的代码:

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

最新更新