У меня есть столбец db, который является сериализованным Hash
:
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 действует подобно исходному объекту, ноэто не фактический экземпляр этого объекта?