什么是Rails的迁移相当于MySQL的'double'数据类型?

JP *_*shy 16 mysql ruby-on-rails

我似乎无法通过搜索谷歌来解决这个问题.

我有一个现有的数据库,其中包含一些类型的列,double我将在rails迁移中写入什么以创建等效的列类型?这是一个相对较旧的数据库,可能有一个更合适的数据类型可以完全使用,但我想看看其他人的想法.

我打算用这种类型:decimal,这是最好的选择吗?

思考?

小智 20

就我而言(用于测试db准备):

MySQL(带mysql2(0.3.11)驱动程序):

double(64,12)
Run Code Online (Sandbox Code Playgroud)

Rails(在db/schema.rb中):

   t.float :limit=>64                    ==> failed
   t.float :limit=>53                    ==> occasionally succeeded
   t.decimal :precision=>64, :scale=>12  ==> fully succeeded
Run Code Online (Sandbox Code Playgroud)


And*_*Vit 12

没有特定类型的双重,Rails试图聪明一点:

数字(整数/十进制/浮点)列定义使用:limit整数列类型中的字节数选项和浮点数的:scale/ :precision选项.

(precision是有效位数; scale是小数点后落后的数量.)


Wil*_*iss 8

你可以让Rails创建一个DOUBLE.我不确定以下解决方案是如何"正式"支持的,但它适用于MySQL.只需将限制设置为53.例如:

t.float :published_at, :limit => 53, :null => true

我从这篇博文中得到了答案,并且有更多关于此的测试结果.


Fit*_*Man 6

我发现这个解决方案存在问题.如果我有这样的声明:

t.float :latitude, :limit => 30
Run Code Online (Sandbox Code Playgroud)

一切看起来都很棒:数据库架构显示该列被声明为double.问题是schema.rb缺少任何:limit值,因此当将模式克隆到测试环境中时,该列将变为float而不是double.单元测试失败,因为列中的准确性不够.

如果您查看ActiveRecord 列定义的文档,您会发现:

:limit - 请求最大列长度.这是以下字符数:string和:text列以及:binary和:integer列的字节数.

它对浮子的主题保持沉默.从代码中可以看出,这是一个副作用:支持此解决方案的限制.看起来在schema.rb的生成中存在一个错误,或者它从未打算以这种方式使用.

我担心答案可能是:十进制数据类型(我不关心)是完全支持的解决方案.