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

标签 mysql ruby-on-rails forms

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

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

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

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

编辑:当我真的想说小数时说整数。

最佳答案

我认为这可能是这些可能性之一:

  1. 在保存到数据库之前,Rails 模型(或 Controller 中的某个步骤)中的验证是将值设置为整数,或至少截断小数位。要查看是否属于这种情况,请检查日志中的 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

关于mysql - Rails 3 并从表单中保存十进制值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6006460/

相关文章:

ruby-on-rails-3 - Rails尝试在下拉菜单更改时提交表单

php - 解决 PHP PDO 错误 : SQLSTATE[42000] [1044]

java - MySQL limit子句是如何实现的

mysql - 使用 Codeigniter 和 MySQL 处理多对多关系的最佳方式?

ruby-on-rails - 在 Rails 应用程序中显示响应时间

javascript - 使用 jquery .val() 返回一个数组

php - SQL:如果在另一个表中找不到给定的 ID,则将值插入一个表中(使用单个查询)

ruby-on-rails - Rails 根或嵌套对象中的强参数

ruby-on-rails - Prawn 、 Prawn 和模板

javascript - 日期选择器禁用先前和 future 日期错误