我的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
,但效果相同。
答案 0 :(得分:1)
替换此
validates_numericality_of :time_employed, allow_blank: true
通过
validates_numericality_of :time_employed, allow_nil: true
api docs中不存在allow_blank 这可能是其中一个原因。
答案 1 :(得分:0)
因为您的time_employed
列在验证之前已经过类型化处理。
validates_numericality_of :time_employed_before_type_cast, allow_blank: true
应该有用。