to_xml с: only и: методами - PullRequest
       2

to_xml с: only и: методами

0 голосов
/ 23 февраля 2011

Я вызываю to_xml для объекта ActiveRecord с параметрами одновременно: only и: method.

Метод, который я включаю, возвращает коллекцию для объектов AR.Это прекрасно работает без параметра: only, но когда он добавлен, я просто получаю представление моих объектов по умолчанию to_s.

т.е.

<author><books>#&lt;Book:0x107753228&gt;</books>\n</author>

Есть идеи?

Обновление, вот код:

class Author < ActiveRecord::Base
  def books
    #this is a named scope
    products.by_type(:book)
  end
end

Author.to_xml(:methods => :books, :only => :id)

Ответы [ 2 ]

2 голосов
/ 23 февраля 2011

AFAIK, вы должны обрабатывать дочерние объекты вручную:

a = Author.find_by_whatever
xml_string = a.to_xml(:only => :id) { |xml|
     a.books.to_xml(:builder => xml, :skip_instruct => true)
}

Флаг :skip_instruct указывает сборщику обойти обычную <?xml version="1.0" encoding="UTF-8"?> преамбулу XML на внутреннем двоичном объекте XML.

XML-сериализатор не будет рекурсивно вызывать to_xml, он просто предполагает, что все, начиная с :methods, представляет собой простые скалярные данные, которые должны быть вставлены в необработанный XML-код.

1 голос
/ 23 февраля 2011

С макушки головы, думаю, вы можете сделать:

Author.to_xml(:methods => {:books => {:only => :id}})

Я использовал нечто подобное при включении ассоциаций AR в XML, но не уверен насчет пользовательских методов.

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