记录的散列表示中的嵌套属性
问题描述:
我已经放弃了我的一天中的几个小时,试图在Rails 3.1中完成这个简单的事情,但没有运气。我有一些模型嵌套2级深,关联多到一个与belongs_to的/外键,如:记录的散列表示中的嵌套属性
TopLevelModel:
MiddleLevelModel:
BottomLevelModel
我热切地加载在我的查询整个层次,像这样:
@model = TopLevelModel.find(1, :include => {:middle_level_children => :bottom_level_children})
JSON序列化程序可以很好地对嵌套层次结构进行序列化(使用:include选项),但这对于我的目的还不够,我需要记录属性的(ruby)哈希表示。 @model.attributes()
将是完美的,但它忽略了我的关系。有没有一种方法可以使用这种方法获得嵌套的散列表示(我彻底阅读文档并怀疑没有,但也许有一些我不知道的奇特选项)。需要明确的是,我要寻找的表示是:
{
:attribute_1 => 'some attribute', #an attribute of top level model
#...
:middle_level_children: => [{ # type 'MiddleLevelModel'
:attr_1 => 'some attribute of middle level model',
# ...
:bottom_level_children => [{ #type 'BottomLevelModel'
:attr => 'some attribute of bottom level model'
}]
}]
}
这似乎是一个令人难以置信的简单(,我认为,普通)的需要,但我有没有运气。
答
为什么不能遍历所有的子关系并为它们的每个实例打印所有的attributes
?
答
可能是一个有点hokey,但给Hash.from_xml漩涡。
使用对象的to_xml方法对关联进行序列化,然后使用Hash.from_xml类方法进行反序列化。
xml = @model_instance.to_xml(:include=>:middle_level_children)
nested_hash = Hash.from_xml(xml)
这将是我的临时解决方案,但我认为这可能是一些更正确的自动/反射能力。 – 2011-12-27 21:56:43