我需要你对 to_xml 函数的帮助。从活动记录导出到 xml 时,如何将所有 nil="True" 值设为默认值''(空白)。
问问题
1099 次
2 回答
3
#to_xml
Rails 添加到ActiveRecord
, Array
,的方法默认Hash
使用builder
gem。XML 也被传递,ActiveSupport::XmlMini
其中nil="true"
属性的添加被硬编码为始终为nil
属性添加。
如果这些值有问题,您可能应该考虑直接使用builder
来构建您的 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
于 2014-01-23T08:35:20.960 回答
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
于 2014-01-23T08:42:24.220 回答