迁移中的完整10位数的整数验证

时间:2016-05-11 07:32:56

标签: mysql ruby-on-rails ruby-on-rails-4 database-migration

尝试在数据库级别写入电话号码验证,这将使用10位数字。

尝试

t.integer :phone, null: false
t.integer :phone, null: false, size: 10
t.integer :phone, null : false, limit: 5

但它没有用。

我的发现

:limit      Numeric Type    Column Size     Max value
1           tinyint         1 byte          127
2           smallint        2 bytes         32767
3           mediumint       3 bytes         8388607
nil, 4, 11  int(11)         4 bytes         2147483647
5..8        bigint          8 bytes         9223372036854775807

当我没有通过限制时,它会提交123并拒绝提交9999999999。由于没有最小值和最大值(2147483647)限制。

需要向数据库提交确切的10位数字,也不需要提交更少的数字。

1 个答案:

答案 0 :(得分:0)

sizelimit选项不起作用。例如,limit = 9,但我们仍然可以保存值长度= 8,这是有道理的。

如果只使用主动记录验证,这非常简单:

validates_length_of :phone, is: 9

为了数据一致性,我们可以添加带约束的迁移

class AddMyConstraint < ActiveRecord::Migration
  def up
    execute "ALTER TABLE table_name ADD CONSTRAINT check_phone_length CHECK (phone >= 1000000000 AND phone <= 999999999 )"
  end

  def down
    execute "ALTER TABLE table_name DROP CONSTRAINT check_phone_length"
  end
end