Rails не может рендерить полиморфные ассоциации в XML? - PullRequest
0 голосов
/ 24 апреля 2010

Когда я рендерил XML с предложением: include для имеющейся у меня полиморфной ассоциации, он не работает. Я получаю XML, возвращающий объектные указатели вместо реальных объектов, например:

<posts>
   #<Comment:0x102ed1540>#<Comment:0x102ecaa38>#<Comment:0x102ec7fe0>#<Comment:0x102ec3cd8>
</posts>

Все же as_json работает! Когда я отображаю JSON с предложением: include, ассоциации отображаются правильно, и я получаю что-то вроде:

posts":[
{"type":"Comment","created_at":"2010-04-20T23:02:30-07:00","id":7,"content":"fourth comment"},
{"type":"Comment","created_at":"2010-04-20T23:02:26-07:00","id":6,"content":"third comment"}]

Мой текущий обходной путь - использование XML Builder, но в долгосрочной перспективе я не слишком доволен этим. Кто-нибудь случайно знает об этой проблеме? Я вроде как в уловке-22, потому что, хотя XML не отображает ассоциации, as_json не отображает в кошерном формате json (возвращает массив, а не список хешей, как должен делать надлежащий json) и десериализатор I ' Использование m на стороне клиента потребовало бы модификации для правильного анализа json.

edit Я использую 2.3.5 - также я использую гем has_many_polymorphs для polymorphic, имеет много: через, что может вызывать проблему ...

Модель состоит в том, что у меня есть видеовстречи, и в каждом видеовстрече есть много сообщений, которые полиморфны комментариям, фотографиям и т. Д.

Код контроллера для XML: format.xml {render: xml => @ hangouts.to_xml (: include =>: пользователи,: методы =>: сообщения)}

Код для JSON аналогичен (в модели): def as_json (параметры) супер (: включить =>: пользователи,: методы =>: сообщения)

Ответы [ 2 ]

0 голосов
/ 21 сентября 2010

Я мог бы получить эту строку, чтобы вернуть полный вложенный XML

format.xml { render :xml => @post.to_xml(:include => [ :links, :assets])}

как

<?xml version="1.0" encoding="UTF-8"?>
<post>
  <body>testing.../body>
  <created-at type="datetime">2010-09-21T06:19:13Z</created-at>
  <id type="integer">1</id>
  <title>1</title>
  <updated-at type="datetime">2010-09-21T06:19:13Z</updated-at>

  <links type="array"/>
  <assets type="array">
    <asset>
      <attachable-id type="integer">1</attachable-id>
      <attachable-type>Post</attachable-type>
      <created-at type="datetime">2010-09-21T06:19:13Z</created-at>
      <data-content-type>image/jpeg</data-content-type>

      <data-file-name>IMG00017-20100906-1226.jpg</data-file-name>
      <data-file-size type="integer">0</data-file-size>
      <id type="integer">1</id>
      <updated-at type="datetime">2010-09-21T06:19:13Z</updated-at>
    </asset>
  </assets>
</post>

Вот наша модель

class Post < ActiveRecord::Base
  has_many    :assets, :as => :attachable, :dependent => :destroy
  has_many    :links, :as => :linkable, :dependent => :destroy
...

Ссылка Модель

class Link < ActiveRecord::Base
  belongs_to :linkable, :polymorphic => true
...

Модель активов

class Asset < ActiveRecord::Base
 belongs_to :attachable, :polymorphic => true
...

Здесь ресурсы и ссылки не привязаны к какой-либо конкретной модели. В текущем использовании они используются в Post. Позже другие модели могут использовать их.

это то, что вы пытаетесь достичь?

0 голосов
/ 03 мая 2010

Из групп Google Objective Resource кажется, что это функция, которой нет в Rails, поэтому я просто использовал XML Builder

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...