Настройка генерации XML в Rails - PullRequest
1 голос
/ 12 октября 2011

Я новичок в Rails, и я написал несколько моделей. Один из сгенерированных моделью XML выглядит так:

<book>
    <read type="boolean">true</read>
    <title>Julius Caesar</title>
    <id type="integer">1</id>
</book>

Сериализованный XML хорош, но я хочу иметь больше контроля над ним. Я хочу сгенерировать то же самое в другом формате. Как:

<book read="true" id="1">
    <title>Julius Caesar</title>
</book>

Как мне этого добиться? Я провел некоторое исследование и обнаружил, что метод to_xml должен быть переопределен. Но я не уверен, как это сделать.

1 Ответ

1 голос
/ 07 февраля 2012

Для этого вы можете использовать пользовательский ::Builder::XmlMarkup. Однако документация о сериализации активной записи (см. Последний пример кода) содержит ошибки. Вы можете сделать это так:

class Book < ActiveRecord::Base
  def to_xml(options = {})
    # Load builder of not loaded yet
    require 'builder' unless defined? ::Builder

    # Set indent to two spaces
    options[:indent] ||= 2

    # Initialize Builder
    xml = options[:builder] ||= ::Builder::XmlMarkup.new(:indent => options[:indent])

    # This is were the real action starts
    xml.book :read => read, :id => id do
      xml.title self.title
    end
  end
end
...