2014-01-23 4 views
0

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

ответ

3

В #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 
0

Вы можете добавить метод для установки специальных значений по умолчанию для генерации 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