ActiveRecord列十进制默认值

时间:2014-06-09 15:14:28

标签: activerecord rails-activerecord bigdecimal

我有一个像这样定义的无表类:

class MyClass
  class MyClassRules < ActiveRecord::Base
    column :a, :integer
    column :b, :boolean
    column :c, :datetime
    column :d, :decimal, :precision => 10, :scale => 4
    column :e, :string
  end
end

当我实例化MyClassRules类型的对象时,类型MyClass的对象会自动生成,并且它被序列化存储在名为my_class的{​​{1}}表中的单个列中}并可从rules访问。所以我也可以拨打my_obj.rules

等电话

我遇到的问题是十进制列的默认值。在构建对象时不提供值,我希望所有值都默认为nil。相反,我得到的是:

my_obj.rules.a

实际上,大多数默认为零,但#<MyClass::MyClassRules a: nil, b: nil, c: nil, d: #<BigDecimal:7fce8f295620,'0.0',9(9)>, e: nil > 默认为decimal。我甚至尝试将0.0 param传递给声明,但这没有任何作用。

如何强制小数列默认为nil?

1 个答案:

答案 0 :(得分:0)

我正在回答我自己的问题。修改类以将值初始化为nil有效:

class MyClass
  class MyClassRules < ActiveRecord::Base
    after_initialize :init

    column :a, :integer
    column :b, :boolean
    column :c, :datetime
    column :d, :decimal, :precision => 10, :scale => 4
    column :e, :string

    def init
      self.d = nil
    end
  end
end

似乎没必要,但它完成了工作。