2011-12-27 58 views
2

我已经放弃了我的一天中的几个小时,试图在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' 
    }] 
    }] 
} 

这似乎是一个令人难以置信的简单(,我认为,普通)的需要,但我有没有运气。

回答

0

为什么不能遍历所有的子关系并为它们的每个实例打印所有的attributes

+0

这将是我的临时解决方案,但我认为这可能是一些更正确的自动/反射能力。 – 2011-12-27 21:56:43

0

可能是一个有点hokey,但给Hash.from_xml漩涡。

使用对象的to_xml方法对关联进行序列化,然后使用Hash.from_xml类方法进行反序列化。

xml = @model_instance.to_xml(:include=>:middle_level_children) 
nested_hash = Hash.from_xml(xml)