Переопределить to_xml для всех объектов в Rails 3 - PullRequest
0 голосов
/ 18 марта 2011

Нужно переопределить метод to_xml для всего, что есть в моем приложении, и с трудом.

Причина довольно тривиальна, мне нужно избавиться от: форматирования отступа, который он делает по умолчанию. Я слышал аргументы, что проблема «это представление», и что я должен просто переопределить to_xml в моих моделях, где мне это нужно.

Проблема в том, что я возвращаю этот материал программно, и установка: skip_types делает мои ответы некорректными. Они неверны, когда у вас есть пустой массив, и вы в конечном итоге: \ п Внезапно это строковое значение читается клиентом, охватывающим \ n (<< там тоже есть куча пробелов, но переполнению стека это, похоже, не нравится). Мне также не нравится идея переопределять одно и то же в 30 местах. </p>

Тем не менее, исправить это действительно легко, я просто не могу поставить его в нужном месте. Просто ищу помощи, где это поставить. И второй взгляд на мое исправление тоже был бы признателен.

Мое исправление

alias __old_to_xml to_xml
def to_xml(options = {})
  options.merge!(:indent => 0)
  __old_to_xml(options) 
end 

1 Ответ

0 голосов
/ 18 марта 2011

Я в целом согласен с опасениями других людей о подходе, но я думаю, что вы можете исправить это, добавив файл в config / initializers следующим образом:

module ActiveRecord::Serialization
  alias __old_to_xml to_xml
  def to_xml(opts={})
    __old_to_xml opts.merge(:indent => 0)
  end
end

Если вы на Rails 3, я полагаю, что вы захотите ActiveModel :: Serializer :: Xml вместо ActiveRecord :: Serialization, но без гарантий.

...