我有一個使用ActiveRecord的store
功能,可以將一個文本框到一個哈希,給記錄僞NOSQL樣的行爲ActiveRecord模型(忽略我不是使用accessors
選項的事實):如何初始化ActiveRecord的序列化對象/存儲的對象類型?
class Book < ActiveRecord::Base
store :infodump
end
book = Book.new
book.infodump[:color] = green
puts book.infodump[:color]
# => green
這工作得很好就夠了,但我想infodump
被視爲HASHIE ::醪對象,以便我可以這樣做:
book = Book.new
book.infodump.author_info = {name: 'Bob', location: {city: 'Manhattan', state: 'NY'}}
puts book.infodump.author_info.location.state
# => NY
如果你不熟悉HASHIE寶石,它允許你將有用的特性提供給哈希......在這種情況下,將哈希密鑰存儲視爲一樣它是一個具有點可訪問屬性的對象:https://github.com/intridea/hashie
即使在嵌套散列時,Mash對象也會自動提供這些便利,這就是爲什麼我希望我的infodump
存儲被視爲Hashie :: Mash對象。
那麼如何初始化該屬性爲Hashie :: Mash?我開始做一個before_initialize
回調做這樣的事情:
def make_mash
infodump = Hashie::Mash.new(infodump)
end
但隨後在每週的對象實例化時......我只需要在對象的生命週期做一次這個對象轉換。