Ruby on Rails to_xml nil =“True”

问题描述:

我需要您对to_xml函数的帮助。当从活动记录导出到xml时,如何将所有nil =“True”值设置为默认值''(空白)。Ruby on Rails to_xml nil =“True”

#to_xml方法Rails添加到ActiveRecordArrayHash默认使用builder宝石。该XML也通过ActiveSupport::XmlMini,其中nil="true"属性的添加总是为nil属性添加hard coded

如果这些值有问题,您应该查看using builder directly来构建您的XML。

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

您也可以使用其他XML库。我只推荐builder,因为它是默认的rails并且可能已经安装。

另一种选择是将对象首先转换为Hashobject.attributes作品如果objectActiveRecord实例)。然后,您可以将任何nil转换为空白字符串。

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