0
我使用Builder在Ruby中創建xml。當我調用generate_object方法兩次時它工作正常。但是,當我在一個循環中進行時,我得到了一些奇怪的結果。兩次輸入都是相同的。Ruby生成器xml
這是代碼。
def generate_xml
xml = Builder::XmlMarkup.new
#this doesn't work
#objects.each do |o|
# generate_object xml, o
#end
#this works...
generate_object(xml, objects[0])
generate_object(xml, objects[1])
end
def generate_object(builder, object)
builder.__send__('ins0', :zObjects, 'xsi:type' => "ins1:account") do |a|
object.to_hash.each do |k,v|
#puts "key #{k} #{v}!!!!!!!!!!!!!!!!!!!"
a.__send__('ins1', k.to_s.zuora_camelize.to_sym, v) unless v.nil?
end
end
end
循環通過對象打印:
<env:Body>
<ins0:create>
[#<Zuora::Objects::Account:0x007fcd69d61788
@changed_attributes={
"auto_pay"=>nil,
"currency"=>nil,
"batch"=>nil,
"bill_cycle_day"=>nil,
"status"=>nil,
"payment_term"=>nil,
"name"=>nil
},
@auto_pay=false,
@currency="USD",
@batch="Batch1",
@bill_cycle_day=1,
@status="Draft",
@payment_term="Due Upon Receipt",
@name="test">,
#<Zuora::Objects::Account:0x007fcd69d60d10
@changed_attributes={
"auto_pay"=>nil,
"currency"=>nil,
"batch"=>nil,
"bill_cycle_day"=>nil,
"status"=>nil,
"payment_term"=>nil,
"name"=>nil
},
@auto_pay=false,
@currency="USD",
@batch="Batch1",
@bill_cycle_day=1,
@status="Draft",
@payment_term="Due Upon Receipt",
@name="test 2">
]
</ins0:create>
</env:Body>
執行兩個呼叫沒有環:
<env:Body>
<ins0:create>
<ins0:zObjects xsi:type="ins1:account">
<ins1:AutoPay>false</ins1:AutoPay>
<ins1:Batch>Batch1</ins1:Batch>
<ins1:BillCycleDay>1</ins1:BillCycleDay>
<ins1:Currency>USD</ins1:Currency>
<ins1:Name>test</ins1:Name>
<ins1:PaymentTerm>Due Upon Receipt</ins1:PaymentTerm>
<ins1:Status>Draft</ins1:Status>
</ins0:zObjects>
<ins0:zObjects xsi:type="ins1:account">
<ins1:AutoPay>false</ins1:AutoPay>
<ins1:Batch>Batch1</ins1:Batch>
<ins1:BillCycleDay>1</ins1:BillCycleDay>
<ins1:Currency>USD</ins1:Currency>
<ins1:Name>test 2</ins1:Name>
<ins1:PaymentTerm>Due Upon Receipt</ins1:PaymentTerm>
<ins1:Status>Draft</ins1:Status>
</ins0:zObjects>
</ins0:create>
</env:Body>
到底哪裏出問題了,當在一個循環的運行呢?說你得到奇怪的結果不會幫助人們找出問題。 – 2013-03-18 20:15:03
如果我正確地解釋它,奇怪的結果是使用循環打印'o.inspect'輸出(第一個輸出),而明確發送每個對象給出xml表示(第二個輸出)。那是對的嗎? – iamnotmaynard 2013-03-18 20:19:36
對,對不起。在通過對象循環的情況下。它打印的東西類似於object.inspect。當我在沒有循環的情況下調用兩次方法時,XML正在正確生成。 – user2183651 2013-03-18 22:59:49