1

我的 postgres 数据库表是用

t.integer :time_employed

我有这样的验证

validates :time_employed, numericality: true, allow_blank: true

我也试过

validates_numericality_of :time_employed, allow_blank: true

但他们都没有给我我想要的结果。我在控制台中做了一些测试,似乎该字段总是设置为0or nil。如果我输入一个字符串,它被设置为0.

我将数据库字段更改为

t.string :time_employed

现在一切正常。这不是一个大问题,但我希望保持模式正确描述的数据。

我对数据库还不太了解,所以这让我陷入了困境。谁能解释这里发生了什么?

编辑:

问题是它允许空白条目,但如果我输入非数值,它不会抛出错误。任何东西都会被验证为好,只是没有保存到数据库中。在更改为t.string并且没有更改验证后,它工作正常。

我也试过allow_nil: true,但效果是一样的。

4

2 回答 2

1

替换这个

validates_numericality_of :time_employed, allow_blank: true

经过

validates_numericality_of :time_employed, allow_nil: true

api 文档中不存在allow_blank这可能是原因之一。

于 2013-01-25T07:36:04.807 回答
0

因为您的time_employed列在验证之前进行了类型转换。

validates_numericality_of :time_employed_before_type_cast, allow_blank: true

应该管用。

于 2014-09-10T08:52:31.177 回答