【问题标题】:Validating numericality of postgres integer field in rails 3验证rails 3中postgres整数字段的数值
【发布时间】:2013-01-25 07:27:20
【问题描述】:

我的 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,但效果一样。

【问题讨论】:

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


    【解决方案1】:

    替换这个

    validates_numericality_of :time_employed, allow_blank: true
    

    validates_numericality_of :time_employed, allow_nil: true
    

    allow_blankapi docs 中不存在,这可能是原因之一。

    【讨论】:

    • 问题已编辑。我也尝试了allow_nil,但结果相同。奇怪的是,使用t.integer 时,非数值不会出错。在我更改为t.string 并且没有更改模型后,一切正常。
    【解决方案2】:

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

    validates_numericality_of :time_employed_before_type_cast, allow_blank: true
    

    应该可以。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-18
      • 1970-01-01
      • 1970-01-01
      • 2016-11-24
      • 1970-01-01
      • 1970-01-01
      • 2021-06-02
      • 2022-11-29
      相关资源
      最近更新 更多