我觉得我在这里服用疯狂的药片。我有一个MySQL支持的ActiveRecord类,并且在Rails中将一些属性报告为Integer类型:
Device.last.score.class # returns `Fixnum`
MySQL报告的列类型为decimal(10,0)
。
我在这里缺少什么?甚至试过打电话给reset_column_information
。迁移看起来正确,架构文件看起来也不错。
注意:这个问题在开发中没有发生,我正在使用SQLite。
这是我的迁移:
class AddScoreColumnToDevices < ActiveRecord::Migration
def change
add_column :devices, :score, :decimal
end
end
答案 0 :(得分:5)
迁移为我做了!谢谢!
新迁移的:decimal
的默认值为:precision => 0
和:scale => 0
,这将导致MySQL小数在小数点后不接受任何内容。
Ruby会看到这个数字,小数点后面没有任何内容,作为Fixnum,这是你正在观察的。
因此,您需要编写一个新的迁移来更改列并给出小数精度和比例&gt; 0.
change_column :devices, :score, :decimal, :precision => 10, :scale => 10
参考文献:
ActiveRecord ConnectionAdapter TableDefinition #column
decimal precision and scale
old reference on MySQL column<->Ruby datatype mapping