我已经放弃了一天的时间来尝试在Rails 3.1中完成这个简单的事情而没有运气。我有一些嵌套2级深度的模型,并且使用belongs_to / foreign键与多对一关联,如:
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'
}]
}]
}
这似乎非常简单(而且,我认为,常见)需要,但我没有运气。
答案 0 :(得分:0)
为什么不能遍历所有子关系并为每个实例打印所有attributes
?
答案 1 :(得分:0)
可能会有点小动作但是给Hash.from_xml一个旋转。
使用对象的to_xml方法使用关联序列化,然后使用Hash.from_xml类方法反序列化。
xml = @model_instance.to_xml(:include=>:middle_level_children)
nested_hash = Hash.from_xml(xml)