我有一张桌子 - 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
感谢。
答案 0 :(得分:0)
所以......发现这实际上只是我的疏忽。
我继承了一个我试图打捞的代码库,我刚刚在模型上找到了一个将price
转换为String的方法。我会把它留在这里,万一发生在其他人身上......