직렬화 문제 Hash
직렬화 A : 몇 수준 깊은 바의 내부 해시를 저장할 때액티브 내가있는 DB 열이
class Foo < ActiveRecord::Base
serialize :bar
end
이 깊은 수준이하지 않는 것 제대로 할 때 역 직렬화하는 I 그것들이 필요하다. 한 레벨 깊이의 객체는 잘 디 직렬화됩니다. 그러나 2 레벨 이상의 오브젝트는 YAML 클래스로 깊이 남아 있습니다.
YAML :: load()를 사용하여 수동으로 deserialize를 시도했지만 인수가 IO의 인스턴스가 아니라는 오류가 발생했습니다.
완전한 루비 객체가 왜 비 직렬화되지 않는지 아는 사람이 있습니까?
EDIT : 추가 조사를 마친 후에는 직렬화 된 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'을 사용하여 클래스가 직렬화 복원 전에로드되는지 확인할 수 있습니다. –
배열에 사용자 정의 클래스가있는 문제가있었습니다. 해결책은 'serialize하기 전에 custom_class'가 필요합니다 : array_of_classes_field, Array' – you786