我有类似此类的东西
# 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
有人暗示我应该如何解决此问题? 预先谢谢你
答案 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