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

时间:2011-05-15 04:19:34

标签: mysql ruby-on-rails forms

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

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

如果我提交了值19.99,我的输入在删除小数后,并以19.00的形式存储在数据库中

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

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

1 个答案:

答案 0 :(得分:14)

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

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

  2. 如果Rails发送的是19.99而不是19.00,则您的两个数据库中的数据类型之间很可能存在小的差异。检查您的MySQL数据库是否只是存储小数的标度为2或更高。 MySQL默认存储精度为10且标度为0的数据类型,因此不存储小数。

  3. 如果#2是问题,解决方案是生成迁移并“更改”您的字段类型以指定比例,如:

    # 'up' portion of a new migration
    def self.up
      change_column :mymodel, :myfield, :decimal, :precision => 6, :scale => 2
    end