ActiveRecord在MySQL中为Decimal时将属性视为Integer

时间:2013-09-12 19:08:44

标签: mysql ruby-on-rails activerecord

我觉得我在这里服用疯狂的药片。我有一个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

1 个答案:

答案 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