我的postgres数据库表是用
t.integer :time_employed
我有这样的验证
validates :time_employed, numericality: true, allow_blank: true
我也试过
validates_numericality_of :time_employed, allow_blank: true
但他们都没有给我想要的结果。我在控制台中做了一些测试,似乎该字段始终设置为 0
或 nil
.如果我输入一个字符串,它被设置为 0
.
我将数据库字段更改为
t.string :time_employed
现在一切都像它应该的那样工作。这不是一个大问题,但我希望保持架构正确描述的数据。
我对数据库还不太了解,所以这让我陷入了困境。谁能解释一下这里发生了什么?
编辑:
问题是它允许空白条目,但如果我输入非数值,它不会引发错误。任何东西都会被验证为好,只是不会保存到数据库中。更改为t.string
并且验证没有更改后,它工作正常。
我也尝试了allow_nil: true
但它也有同样的效果。
替换这个
validates_numericality_of :time_employed, allow_blank: true
由
validates_numericality_of :time_employed, allow_nil: true
allow_blank API 文档中不存在,这可能是原因之一。
因为您的time_employed
列在验证之前是类型转换的。
validates_numericality_of :time_employed_before_type_cast, allow_blank: true
应该工作。