Rails 3并从表单中保存十进制值

Dev*_*n M 9 mysql forms ruby-on-rails

我的一个应用程序中有一个奇怪的错误.

当我使用sqlite3数据库时,错误不存在.但是当我使用mysql2作为数据库适配器时,我遇到了从表单中保存十进制值的错误.

如果我在删除小数后提交值19.99我的输入并将其作为19.00存储在数据库中

什么会导致这个?数据库具有正确的列设置,我可以使用rails控制台创建正确的记录.

编辑:当我真的想说十进制时说的整数.

ssc*_*rus 14

我认为这可能是其中一种可能性:

  1. 在保存到数据库之前,Rails模型(或控制器中的某个步骤)中的验证是将值设置为整数,或者至少截断小数.要查看是否是这种情况,请检查INSERT日志中的操作,并查看Rails 尝试放入的数据.

  2. 如果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
Run Code Online (Sandbox Code Playgroud)