to_xml 함수에 대한 도움이 필요합니다. 활성 레코드에서 xml로 내보낼 때 어떻게 모든 nil = "True"값을 기본값 (')으로 만들 수 있습니까?Ruby on Rails to_xml nil = "True"
0
A
답변
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
권장합니다.
또 다른 옵션은 (object
는 ActiveRecord
인스턴스의 경우는 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