YWC*_*llo 1 mysql activerecord ruby-on-rails
我觉得我在这里服用疯狂的药片.我有一个MySQL支持的ActiveRecord类,并且在Rails中将一些属性报告为Integer类型:
Device.last.score.class # returns `Fixnum`
Run Code Online (Sandbox Code Playgroud)
MySQL报告列类型decimal(10,0).
我在这里错过了什么?甚至试过打过电话reset_column_information.迁移看起来正确,架构文件看起来也不错.
注意:这个问题在开发中没有发生,我正在使用SQLite.
这是我的迁移:
class AddScoreColumnToDevices < ActiveRecord::Migration
def change
add_column :devices, :score, :decimal
end
end
Run Code Online (Sandbox Code Playgroud)
迁移为我做了!谢谢!
对于新迁移的默认值:decimal是:precision => 0和:scale => 0,这将导致一个MySQL十进制接受小数点后什么都没有.
Ruby会在小数点之后看到这个数字,作为Fixnum,这是你正在观察的.
因此,您需要编写一个新的迁移来更改列并给出小数精度和scale> 0.
change_column :devices, :score, :decimal, :precision => 10, :scale => 10
Run Code Online (Sandbox Code Playgroud)
参考:
ActiveRecord ConnectionAdapter TableDefinition #column
小数精度和缩放
旧列上的旧参考< - > Ruby数据类型映射