我需要你对to_xml函数的帮助。当从活动记录导出到xml时,如何将所有nil =“True”值设为默认值''(空白)。
答案 0 :(得分:3)
#to_xml
方法Rails添加到ActiveRecord
,Array
,Hash
默认使用builder
gem。 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
,因为它是rails默认的,可能已经安装。
另一种选择是首先将对象转换为Hash
object.attributes
,如果object
是ActiveRecord
实例,则可以使用data = object.attributes
data.each_pair{|col, val| data[col] = "" if val.nil? }
data.to_xml
。然后,您可以将任何nils转换为空字符串。
{{1}}
答案 1 :(得分: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