如何初始化ActiveRecord的序列化对象/存储的对象类型?

时间:2013-07-02 00:33:14

标签: ruby-on-rails activerecord serialization

我有一个ActiveRecord模型,它使用ActiveRecord store功能将文本字段转换为Hash,为记录提供类似行为的伪类(忽略我不使用{{1选项):

accessors

这个工作得很好,但我希望将class Book < ActiveRecord::Base store :infodump end book = Book.new book.infodump[:color] = green puts book.infodump[:color] # => green 视为Hashie :: Mash对象,以便我可以这样做:

infodump

如果您不熟悉Hashie gem,它允许您为哈希提供有用的功能......在这种情况下,将哈希键存储视为具有点可访问属性的对象:{ {3}}

特别是Mash对象即使在嵌套的哈希值上也会自动提供这些便利,这就是为什么我希望将book = Book.new book.infodump.author_info = {name: 'Bob', location: {city: 'Manhattan', state: 'NY'}} puts book.infodump.author_info.location.state # => NY 商店视为Hashie :: Mash对象。

那么如何将该属性初始化为Hashie :: Mash?我开始做一个infodump回调来做这样的事情:

before_initialize

但是每次实例化对象时都会运行...我只需要在对象的生命周期内完成一次对象转换。

1 个答案:

答案 0 :(得分:1)

在我的模型中,我使用serialize,允许将类型传递给/从

序列化
serialize :infodump, Array

此方法将对象序列化为yaml,因此Hashie::Mash需要实现相应的方法。