Rails + Postgres - 在数据库中存储为字符串的小数

时间:2017-07-08 18:15:01

标签: ruby-on-rails ruby postgresql

我有一张桌子 - boot_camps。它有一个price字段,在模式中是十进制(8,2)。由于某种原因,值似乎转换为字符串。它使模型中的验证失败:

validates :price, numericality: { greater_than: 0 }

出现此错误: ArgumentError: comparison of String with 0 failed

schema.rb:

create_table "boot_camps", force: :cascade do |t|
  t.string   "title"
  t.decimal  "price",             precision: 8, scale: 2
  t.integer  "capacity"
  t.date     "start_date"
  t.date     "end_date"
end

如果我在psql中运行\d boot_camps,我会得到:

                         Table "public.boot_camps"
  Column       |            Type             |                        
Modifiers
-------------------+-----------------------------+---------------------
 id                | integer                     | not null default 
 title             | character varying           |
 price             | numeric(8,2)                |
 capacity          | integer                     |
 start_date        | date                        |
 end_date          | date                        |

但是在rails控制台中查看的BooCamp记录显示:

#<BootCamp:0x007fc3a8e7abd0> {
               :id => 1,
            :title => "test",
            :price => "30.00",
         :capacity => 11,
       :start_date => nil,
         :end_date => nil,
}

BootCamp.last.price.class //=> String < Object

感谢。

1 个答案:

答案 0 :(得分:0)

所以......发现这实际上只是我的疏忽。

我继承了一个我试图打捞的代码库,我刚刚在模型上找到了一个将price转换为String的方法。我会把它留在这里,万一发生在其他人身上......