2

Я отказался от своих дней, пытаясь выполнить эту простую вещь в Rails 3.1 без везения. У меня есть некоторые модели вложенных 2 уровня глубоки и связаны многие-к-одному с belongs_to/внешним ключом, как:Вложенные атрибуты в хэш-представление записи

TopLevelModel: 
    MiddleLevelModel: 
    BottomLevelModel 

Я жадно загружая всю иерархию в моих запросах так:

@model = TopLevelModel.find(1, :include => {:middle_level_children => :bottom_level_children}) 

Сериализатор JSON отлично работает для сериализации вложенной иерархии (с использованием опции: include), но этого недостаточно для моих целей, и мне нужно (рубиновое) хэш-представление атрибутов записи. @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

Это будет мое временное решение, но я подумал, что для этого есть, возможно, более правильная, автоматическая/отражающая способность. –

0

Может быть немного хоккеем, но дать Hash.from_xml вихрь.

Используйте метод to_xml объекта для сериализации с ассоциациями и затем десериализуйте с помощью метода класса Hash.from_xml.

xml = @model_instance.to_xml(:include=>:middle_level_children) 
nested_hash = Hash.from_xml(xml) 
Смежные вопросы