Ruby on Rails to_xml nil =“True”
答
的#to_xml
方法Rails添加到ActiveRecord
,Array
和Hash
默认使用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并且可能已经安装。
另一种选择是将对象首先转换为Hash
(object.attributes
作品如果object
是ActiveRecord
实例)。然后,您可以将任何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