如何在Rails 4迁移中指定整数大小的限制? (我的数据库是PostgreSQL。)
我有phone_number
的字段,长度应为8位数。如果我指定:limit => 8
,那么这是字节大小而不是数字的长度。
有办法做到这一点吗?
答案 0 :(得分:6)
你这一切都错了。电话号码不一个号码,电话号码是包含(大部分)数字字符的字符串。你不会做任何数字化的事情 - 例如算术 - 用电话号码,所以他们不是数字,他们是字符串。
因此,请将phone_number
列设为长度为8的字符串:
t.string :phone_number, :limit => 8
并清理并验证模型中的格式:
before_validation :clean_up_phone_number
validates :phone_number, :format => { :with => /\A\d{8}\z/ }
def clean_up_phone_number
# Do whatever you want or need to strip out spaces, hyphens, etc. in here
end
答案 1 :(得分:0)
或者你可以用这种方式在迁移中使用mv-core gem(https://github.com/vprokopchuk256/mv-core)(语法几乎与AciveModel :: Validations一样):
def change
update_table :users do |table|
t.string :phone_number,
validates: { length: 8,
format: /\A\d{8}\z/,
allow_blank: true,
allow_nil: true }
end
end
然后将该验证冒充到您的模型中:
class User < ActiveRecord::Base
enforce_migration_validations
end
默认情况下,您的验证将被定义为PostgreSQL的CHECK约束。但你可以改变它来触发约束,例如。 请参阅文档中的详细信息。