2010-04-24 3 views
0

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

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

Но as_json работает! Когда я сделать JSON с: включить пункт, ассоциации оказываются правильно, и я получаю что-то вроде:

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

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

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

Код контроллера для XML: format.xml {render: xml => @ hangouts.to_xml (: include =>: users,: methods = >: должности)}

Код для json аналогичен (в модели): def as_json (options) super (: include =>: users,: methods =>: posts)

+0

Какую версию Rails вы используете? –

+0

Вставьте свой код контроллера – bensie

+0

jpartogi, bensie: Я использую 2.3.5 - также я использую камень has_many_polymorphs для полиморфного, имеет много: через, что может вызвать проблему ... Модель заключается в том, что у меня есть тусовки , и у каждой видеовстречи есть много сообщений, которые являются полиморфными для комментариев, фотографий и т. д. Код контроллера для XML: format.xml {render: xml => @hangouts.to_xml (: include =>: users,: methods =>: posts)} Код для json аналогичен (в модели): def as_json (опции) super (: include =>: users,: methods => : posts) – ambertch

ответ

0

Из групп объектов Objective Resource, похоже, что это функция, которая не существует в Rails, поэтому я в конечном итоге только с помощью XML-строитель

0

я мог бы получить эту линию, чтобы вернуть полную вложенными 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 
... 

Link Модель

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

Asset Model

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

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

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

Смежные вопросы