我的一个应用程序中有一个奇怪的错误。
当我使用 sqlite3 数据库时,错误不存在。但是,当我使用 mysql2 作为数据库适配器时,我遇到了从表单中保存十进制值的错误。
如果我在删除小数点后提交值 19.99,我的输入将作为 19.00 存储在数据库中
什么会导致这种情况?数据库具有正确的列设置,我可以使用 Rails 控制台创建正确的记录。
编辑:当我真的想说小数时说整数。
最佳答案
我认为这可能是这些可能性之一:
在保存到数据库之前,Rails 模型(或 Controller 中的某个步骤)中的验证是将值设置为整数,或至少截断小数位。要查看是否属于这种情况,请检查日志中的
INSERT
操作,并查看 Rails 尝试放入的数据。如果 Rails 发送的是
19.99
而不是19.00
,您的两个数据库中的数据类型很可能存在细微差异。检查您的 MySQL 数据库是否没有存储 小数位数为 2 或更高 的小数。 MySQL 默认存储精度为 10、小数位数为 0 的数据类型,因此不存储小数。
如果 #2 是问题所在,解决方案是生成迁移并“更改”您的字段类型以指定比例,例如:
# 'up' portion of a new migration
def self.up
change_column :mymodel, :myfield, :decimal, :precision => 6, :scale => 2
end
关于mysql - Rails 3 并从表单中保存十进制值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6006460/