如何在Rails活动记录中为JSON列/属性设置默认值?

时间:2019-07-11 11:55:08

标签: ruby-on-rails json serialization

我有类似此类的东西

#  json_column  :json
class MyClass < ActiveRecord::Base
  def name=(val)
    json_column[:name] = val
  end

  def name
    json_column[:name]
  end
end

当我加载数据时,它工作正常,但是如果我创建一个像MyClass.new(name: "foo")这样的新实例,我的问题就开始了...

如果我照原样进行操作,它将在name=中引发异常,因为nil不是哈希:)。

如果我尝试在after_initialize方法中初始化json_column

after_initialize { self.json_column ||= {}  }

它也不起作用,因为似乎在设置参数后调用了after_initialize

有人暗示我应该如何解决此问题? 预先谢谢你

1 个答案:

答案 0 :(得分:1)

您可以使用store然后after_initialize这样的回调来分配默认值


    store :json_column_name, accessors: [:key_name], coder: Hash # in mysql

    store_accessor :json_column_name, [:key_name] # in psql

    after_initialize :initialize_defaults, :if => :new_record?

    def initialize_defaults
        self.key_name = value
    end