Сериализация с настройками параметров - PullRequest
8 голосов
/ 09 июня 2011

Я использую serialize_with_options (http://www.viget.com/extend/simple-apis-using-serializewithoptions/) в проекте rails и использую именованные блоки для рендеринга в соответствии с примером на связанной странице:

class Speaker < ActiveRecord::Base
  # ...

  serialize_with_options do
    methods   :average_rating, :avatar_url
    except    :email, :claim_code
    includes  :talks
  end

  serialize_with_options :with_email do
    methods   :average_rating, :avatar_url
    except    :claim_code
    includes  :talks
  end

end

Затем я могу вызвать конфигурацию второго блока с помощью @ speaker.to_xml (: with_email). Это хорошо работает, однако я хотел бы выяснить, как вызвать этот блок, когда у меня есть массив объектов. Например, следующее не работает:

@speakers = Speaker.all
@speakers.to_xml(:with_email)

, который возвращает ошибку «Ошибка типа: невозможно дублировать символ». Это имеет смысл для меня, так как массив не был настроен для использования serialize_with_options. Как я могу получить этот тег для передачи отдельным объектам динамиков при запуске .to_xml и рендеринга всех динамиков: with_email?

1 Ответ

1 голос
/ 12 мая 2012

В приведенном выше примере @speakers является объектом Array. Вы должны реализовать / переопределить to_xml там. Тогда я должен работать:

class Array
    def to_xml (with_email)
        self.each do |element|
            element.to_xml(with_email)
        end
    end
end
...