Я потратил часы своего дня, пытаясь выполнить эту простую вещь в Rails 3.1 без удачи. У меня есть модели, вложенные в 2 уровня глубиной и связанные многие-к-одному с ключом own_to / foreign, например:
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'
}]
}]
}
Это кажется невероятно простой (и, я думаю, общей) потребностью, но мне не повезло.