我使用ActiveRecord的序列化对象到数据库字段:Ruby on Rails中的序列化功能
class DrawElement < ActiveRecord::Base
...
serialize :content
end
我正在序列化对象的原因是我使用const_missing从磁盘动态加载类型,所以我不必为它们设置数据库表。
def DrawElement.const_missing(const)
require File.join('draw_elements',const.to_s)
draw_class = const_get(const)
return draw_class if draw_class
raise "Draw Element not found #{const.to_s}"
end
因此,当我想添加绘图元素时,我会在irb
draw_element.content = DrawElement::Text.new
这里的一切都很好
问题在于,当我尝试在新会话中从数据库加载对象时,YAML::load
在加载文件之前从不调用const_missing
来要求类定义。因此,我的所有@content
个对象都会以YAML::Object
有更好的方法吗?我试图能够添加新类型而无需更改数据库,或者在DrawElements和Document之间建立has_many_polymorph
关系。
Ruby on Rails v.2.3.8,Ruby v.1.8.7
答案 0 :(得分:0)
根据我的经验YAML::load
返回哈希值。由我来完成哈希并对其内容做一些事情。 load
或load_file
都不接受阻止进入它们并影响YAML文档的解析方式。
你可以尝试弄乱load_documents
或each_document
,因为它们会占用一块,但我不知道你是否可以通过这种方式添加额外的哈希元素。