验证rails 3中postgres整数字段的数值

时间:2013-01-25 07:27:21

标签: ruby-on-rails ruby-on-rails-3 postgresql

我的postgres数据库表是用

设置的
t.integer :time_employed

我有这样的验证

validates :time_employed, numericality: true, allow_blank: true

我也试过

validates_numericality_of :time_employed, allow_blank: true

但他们都没有给我我想要的结果。我在控制台中进行了一些测试,似乎该字段始终设置为0nil。如果我输入一个字符串,则将其设置为0

我将数据库字段更改为

t.string :time_employed

现在一切都像它应该的那样。这不是一个大问题,但我希望保持模式正确描述的数据。

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

编辑:

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

我也试过allow_nil: true,但效果相同。

2 个答案:

答案 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

应该有用。