2014-01-23 71 views

回答

3

#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 
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