mysql - ActiveRecord 十进制类型字段截断为整数

标签 mysql ruby-on-rails activerecord ruby-on-rails-4

我有一个在 MySQL 中使用 Rails 4 迁移创建的表:

| nba_average_stats | CREATE TABLE `nba_average_stats` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `ppg` decimal(2,0) DEFAULT '0',
  `apg` decimal(2,0) DEFAULT '0',
  `rpg` decimal(2,0) DEFAULT '0',
  `tpm` decimal(2,0) DEFAULT '0',
  `blk` decimal(2,0) DEFAULT '0',
  `stl` decimal(2,0) DEFAULT '0',
  `year` int(11) DEFAULT '0',
  `player_id` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=414 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci |

我遇到的问题是当我做类似的事情时:

stat.ppg = 4.3; stat.save

它在数据库中显示为整数 4

我的数据库类型不对吗?我在 Rails 端做错了什么吗?

最佳答案

你会想要增加小数位:

https://dev.mysql.com/doc/refman/5.0/en/precision-math-decimal-characteristics.html

| nba_average_stats | CREATE TABLE `nba_average_stats` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `ppg` decimal(2,1) DEFAULT '0',
  `apg` decimal(2,1) DEFAULT '0',
  `rpg` decimal(2,1) DEFAULT '0',
  `tpm` decimal(2,1) DEFAULT '0',
  `blk` decimal(2,1) DEFAULT '0',
  `stl` decimal(2,1) DEFAULT '0',
  `year` int(11) DEFAULT '0',
  `player_id` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=414 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci |

decimal 的第一个参数是精度,第二个参数是小数位数。精度包含小数位数,因此精度必须始终大于或等于小数位数。比例是小数点后的位数。要存储上面示例中的值 4.3,您至少需要 decimal(2,1),这意味着最多 2 位数字,1 位在小数点后。

将其更改为 decimal(2,1) 将允许您将 4.3 存储为 4.3 而不是向下舍入为 4

由于您提到了 Rails 4 和迁移,您可以将精度和比例指定为迁移 DSL 中小数列类型的可选参数。例如:

add_column :nba_stats, :ppg, :decimal, :precision => 2, :scale => 1

http://guides.rubyonrails.org/active_record_migrations.html#column-modifiers

关于mysql - ActiveRecord 十进制类型字段截断为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21741703/

相关文章:

mysql - 使用 TypeORM 在同一个表中建立一对一关系

ruby-on-rails - Rails Windows Vagrant 响应时间非常慢

ruby-on-rails - 无法在 Rails 事件模型中保存整数数组...为什么?

ruby-on-rails - 如何使用 accepts_nested_attributes_for 在 Rails ActiveRecord 中创建、关联和取消关联相关记录

java - 没有选择数据库 GAE

php - 在同一实例中由多个用户同时插入值时获取最后插入的 ID

mysql - mysql中如何根据多个条件进行排序

python - 从 Rails 调用 bash 命令时如何设置系统变量(例如 $PYTHONPATH)?

ruby-on-rails - 使用 ActiveRecord 从对象到表

ruby-on-rails - Rails 数据库特定的数据类型