【发布时间】:2011-03-21 06:25:59
【问题描述】:
我有一个 db 列,它是一个序列化的Hash:
class Foo < ActiveRecord::Base
serialize :bar
end
当我在 bar 内存储几级深的哈希时,更深的级别在我需要时似乎无法正确反序列化。一层深的对象可以很好地反序列化。但是,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 对象的行为与原始对象相似,但它不是该对象的实际实例?
【问题讨论】:
标签: ruby-on-rails ruby serialization activerecord