记录的哈希表示中的嵌套属性

时间:2011-12-27 21:38:35

标签: ruby-on-rails ruby ruby-on-rails-3 model nested-attributes

我已经放弃了一天的时间来尝试在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'
     }]
   }]
}

这似乎非常简单(而且,我认为,常见)需要,但我没有运气。

2 个答案:

答案 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)