Мне нужна ваша помощь в функции to_xml. Как я могу сделать все значение nil = "True" значением по умолчанию '' (пустое) при экспорте в xml из активной записи.Ruby on Rails to_xml nil = "True"
ответ
В #to_xml
метод Rails добавляет к ActiveRecord
, Array
и Hash
использует builder
камень по умолчанию. XML также передается через ActiveSupport::XmlMini
, где добавление атрибута nil="true"
равно hard coded, которое всегда должно быть добавлено для атрибутов nil
.
Возможно, вы должны посмотреть на using builder
directly, чтобы создать свой XML, если эти значения являются проблематичными.
Builder::XmlMarkup.new.object{|xml| xml.value "" }
#=> "<object><value></value></object>"
Вы также можете использовать другие библиотеки XML. Я рекомендую только builder
, потому что это рельсы по умолчанию и, вероятно, уже установлены.
Другой вариант заключается в преобразовании объекта в Hash
первых (object.attributes
работ, если object
является ActiveRecord
экземпляр). Затем вы можете преобразовать любые nils в пустые строки.
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