установка новых свойств по умолчанию для сериализатора to_xml в Rails - PullRequest
0 голосов
/ 22 декабря 2008

В Rails я пишу серию контроллеров для генерации XML. Каждый раз, когда я передаю несколько свойств в to_xml, как:

to_xml(:skip_types => true, :dasherize => false)

Есть ли способ установить их как новые свойства по умолчанию, которые будут применяться при каждом вызове to_xml в моем приложении, чтобы мне не пришлось повторяться?

Ответы [ 3 ]

3 голосов
/ 22 декабря 2008

Вы вызываете to_xml для хэша или модели ActiveRecord (или чего-то еще)?

Я не такой, как вам бы хотелось, но вы можете легко установить патч to_xml и переопределить его для запуска с этими параметрами. Я бы предложил вам создать новый метод to_default_xml, который просто вызывал to_xml с параметрами, которые вы хотели

def to_default_xml
  self.to_xml(:skip_types => true, :dasherize => false)
end

Обновление:

Поскольку вы хотите добавить это к паре моделей ActiveRecord, вы можете сделать две вещи, открыть ActiveRecord :: base (который немного хакерский и хрупкий) или создать модуль и импортировать его в каждую модель, которую вы хотите использовать. с этим. Немного больше печатать, но намного чище код.

Я бы поместил класс в lib /, который выглядит примерно так:

module DefaultXml
  def to_default_xml
    self.to_xml(:skip_types => true, :dasherize => false)
  end
end

Тогда в ваших моделях:

class MyModel < ActiveRecord::Base
  include DefaultXml
end
1 голос
/ 29 августа 2009

Я собрал плагин для обработки параметров сериализации по умолчанию. Проверьте это на github.com/laserlemon/dry_serial/tree/master.

class MyModel < ActiveRecord::Base
  dry_serial :skip_types => true, :dasherize => false
end

Также имеется поддержка нескольких стилей сериализации, которые можно назвать так:

@my_model.to_xml(:skinny)
@my_model.to_xml(:fat)
0 голосов
/ 11 августа 2009

Предполагая, что вы говорите о методе to_xml AR и в зависимости от ваших потребностей, вы можете с легкостью расширить класс AcitveRecord, создав файл с именем: lib \ class_extensions.rb

class ActiveRecord::Base   
   def to_xml_default
      self.to_xml(:skip_types => true, :dasherize => false)
   end
end

Затем поместите это в инициализатор, чтобы оно включалось при запуске Rails:

require 'class_extensions'

Теперь вы можете использовать его следующим образом (без необходимости специально включать его в каждую модель):

MyModel.to_xml_default
...