2014-01-23 4 views
0

to_xml 함수에 대한 도움이 필요합니다. 활성 레코드에서 xml로 내보낼 때 어떻게 모든 nil = "True"값을 기본값 (')으로 만들 수 있습니까?Ruby on Rails to_xml nil = "True"

답변

3

#to_xml 방법 레일은 ActiveRecord, Array에 추가하고, Hash는 기본적으로 builder 보석을 사용합니다. XML은 ActiveSupport::XmlMini에도 전달되며 nil="true" 속성의 추가는 nil 속성에 항상 추가되도록 hard coded입니다.

이 값에 문제가있는 경우 XML을 작성하려면 using builder directly을 봐야합니다.

Builder::XmlMarkup.new.object{|xml| xml.value "" } 
#=> "<object><value></value></object>" 

다른 XML 라이브러리를 사용할 수도 있습니다. 난 레일 기본 ​​및 가능성이 이미 설치되어 있기 때문에 builder 권장합니다.

또 다른 옵션은 (objectActiveRecord 인스턴스의 경우는 object.attributes 작품)을 Hash 첫째로 개체를 변환하는 것입니다. 그런 다음 임의의 nils를 빈 문자열로 변환 할 수 있습니다.

data = object.attributes 
data.each_pair{|col, val| data[col] = "" if val.nil? } 
data.to_xml 
0

XML 생성을위한 특수 기본값을 설정하는 방법을 추가 할 수 있습니다. 그런 다음이 메서드는 메모리에있는 레코드를 복제하고 기본값을 설정하고 마지막으로 xml을 생성하는 재정의 된 to_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