Ruby on Rails to_xml nil="True"

Мне нужна ваша помощь по функции to_xml. Как я могу сделать все nil="True" значение по умолчанию "(пустым) при экспорте в xml из активной записи.

2 ответа

#to_xml метод Rails добавляет к ActiveRecord, Array, а также Hash использует builder драгоценный камень по умолчанию. XML также передается через ActiveSupport::XmlMini где сложение nil="true" атрибут жестко закодирован, чтобы всегда добавляться для nil атрибутов.

Вы должны, вероятно, посмотреть на использование builder непосредственно для создания вашего XML, если эти значения являются проблематичными.

Builder::XmlMarkup.new.object{|xml| xml.value "" }
#=> "<object><value></value></object>"

Вы также можете использовать другие библиотеки XML. Я только рекомендую builder потому что это рельсы по умолчанию и, вероятно, уже установлены.

Другой вариант - преобразовать объект в Hash первый (object.attributes работает если object является ActiveRecord пример). Затем вы можете конвертировать любые нули в пустые строки.

data = object.attributes
data.each_pair{|col, val| data[col] = "" if val.nil? }
data.to_xml

Вы можете добавить метод для установки специальных значений по умолчанию для генерации XML. Этот метод может быть вызван из переопределенного to_xml метод, который дублирует запись в памяти, устанавливает значения по умолчанию и, наконец, генерирует xml. Пример кода:

class Post < ActiveRecord::Base
  def set_xml_defaults
    blanks = self.attributes.find_all{|k,v| v.nil? }.map{|k,v| [k,''] }
    self.attributes = Hash[blanks]
  end

  alias_method :to_xml_no_defaults, :to_xml

  def to_xml(options = {}, &block)
    dup = self.dup
    dup.set_xml_defaults
    dup.to_xml_no_defaults
  end
end
Другие вопросы по тегам