Вложенные атрибуты в хеш-представлении записи - PullRequest
2 голосов
/ 28 декабря 2011

Я потратил часы своего дня, пытаясь выполнить эту простую вещь в 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'
     }]
   }]
}

Это кажется невероятно простой (и, я думаю, общей) потребностью, но мне не повезло.

Ответы [ 2 ]

0 голосов
/ 28 декабря 2011

Может быть, немного обмануть, но поднять Hash.from_xml.

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

xml = @model_instance.to_xml(:include=>:middle_level_children)
nested_hash = Hash.from_xml(xml)
0 голосов
/ 28 декабря 2011

Почему вы не можете перебрать все ваши дочерние отношения и напечатать все attributes для каждого их экземпляра?

...