2013-07-22 33 views
1

我正在使用Mongo並將散列存儲在數據庫中。不過後來當我檢索散列時,我不能再使用我的對象方法了嗎?我怎樣才能將檢索到的哈希從數據庫轉換爲TraitScore?如何將哈希變成紅寶石對象?

class TraitScore < Hash 
    def initialize(attrs = {}, options = nil) 
    self['net'] = attrs[:net] || 0.0 
    self['total'] = attrs[:total] || 0.0 
    self['score'] = attrs[:score] || 0.0 
    end 

    def inc_net(val) 
    self['net'] += val 
    end 

    def inc_total(val) 
    self['total'] += (val || 0).abs 
    end 

    def set_score(score) 
    self['score'] = score 
    end 
end 
+0

...'TraitScore.new(hash)'? – Ajedi32

+1

您不能在Ruby中將一個對象「投」到另一個類中(除非通過'evil.rb'; Google它)。您只能根據現有對象創建_new_對象。 – Phrogz

回答

5

從源代碼判斷,它看起來像這正是TraitScore的初始化方法所做的。

irb(main):001:0> hash = {net: 0.0, total: 5, score: 7} 
=> {:net=>0.0, :total=>5, :score=>7} 
irb(main):002:0> hash.class 
=> Hash 
irb(main):003:0> object = TraitScore.new(hash) 
=> {"net"=>0.0, "total"=>5, "score"=>7} 
irb(main):004:0> object.class 
=> TraitScore