【问题标题】:How to initialize the object type of ActiveRecord's serialized object/store?如何初始化 ActiveRecord 的序列化对象/存储的对象类型?
【发布时间】:2013-07-02 00:33:13
【问题描述】:

我有一个 ActiveRecord 模型,它使用 ActiveRecordstore 功能将文本字段转换为哈希,以提供类似记录伪 noSQL 的行为(忽略我没有使用 accessors 选项的事实) :

class Book < ActiveRecord::Base 
   store :infodump
end 

book = Book.new
book.infodump[:color] = green
puts book.infodump[:color]
# => green

这工作得很好,但我希望 infodump 被视为 Hashie::Mash 对象,以便我可以这样做:

book = Book.new
book.infodump.author_info = {name: 'Bob', location: {city: 'Manhattan', state: 'NY'}}
puts book.infodump.author_info.location.state
# => NY

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

Mash 对象尤其会自动赋予这些便利,即使是嵌套散列也是如此,这就是为什么我希望我的 infodump 存储被视为 Hashie::Mash 对象。

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

 def make_mash
     infodump = Hashie::Mash.new(infodump)
 end

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

【问题讨论】:

    标签: ruby-on-rails activerecord serialization


    【解决方案1】:

    在我的模型中,我使用serialize,它允许传递一个类型以序列化到/从

    serialize :infodump, Array
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-31
      • 2019-10-31
      • 2011-08-13
      相关资源
      最近更新 更多