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