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是小数点后落后的数量.)
我发现这个解决方案存在问题.如果我有这样的声明:
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的生成中存在一个错误,或者它从未打算以这种方式使用.
我担心答案可能是:十进制数据类型(我不关心)是完全支持的解决方案.