我有一個數據庫列是一個序列化Hash
:ActiveRecord的序列化問題
class Foo < ActiveRecord::Base
serialize :bar
end
當我保存的酒吧,是幾級深的內部哈希,更深層次似乎不正確反序列化時,我需要他們。一級深度的對象得到反序列化就好了。但是,2級或更多級別的對象仍然是YAML類。
我嘗試使用YAML :: load()手動反序列化,但得到一個錯誤,說參數不是IO的一個實例。
有誰知道爲什麼完整的Ruby對象不反序列化?
編輯:經過進一步調查後,問題似乎源於我從序列化的YAML調用虛擬屬性的事實。
class Foo < ActiveRecord::Base
serialize :bar
end
class Bar < ActiveRecord::Base
attr_accessor :enabled
end
@bars = @foo.bar[:bars]
@bars.each do |bar|
puts bar.enabled
end
產量:
NoMethodError: undefined method `enabled' for #<YAML::Object:0xb6f11844>
from (irb):12
from (irb):11:in `each'
from (irb):11
from :0
這是否意味着反序列化是不是「真正的」,即YAML對象的行爲類似原來的對象,但它不是該對象的實際實例?
您可以使用'serialize:attribute,Classname'來確保類在反序列化之前被加載。 – 2012-03-08 23:21:51
我有一個問題,我有一個自定義類的數組 - 解決方案是'需要'custom_class''前'serialize:array_of_classes_field,Array' – you786 2014-01-22 05:07:13