尝试在数据库级别写入电话号码验证,这将使用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位数字,也不需要提交更少的数字。
答案 0 :(得分:0)
size
或limit
选项不起作用。例如,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