1

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

4

2 回答 2

3

#to_xmlRails 添加到ActiveRecord, Array,的方法默认Hash使用buildergem。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如果objectActiveRecord实例则有效)。然后,您可以将任何 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 回答