へ
変更
platform_user_data = { :name => "foo", :level => 15 }
あなたの問題は、単に名前の変更やラッピング親ノード内で、私はあなたが行っていると仮定していることによって解決される場合、私は実際には非常に驚かれることと思いますあなたが解決策に近づくにつれて、より多くの問題にぶつかることができます。私は(残念ながら)この船に乗っていたので、私が学んだことを書いています。
一般的に、サービスでは、複雑なXMLまたはその他の醜いXMLが予想される場合、ActiveResourceを使用してサービスを処理することはやや難しいことがわかりました。これらのケースでは、作成(POST)または更新(PUT)が内部的にオブジェクトのto_xmlを呼び出してデータをXMLにシリアル化する必要があるため、これらのケースでは私のソリューションは必然的にオブジェクトのto_xmlメソッドをオーバーライドします。上記の方法は、ルビーのxmlビルダーを利用することもできますし、もっと面倒なものには 'here document'を使うこともできます。私は結論は、を正確にあなたのサービスが期待していることを知っていると思うし、サービスに送信するためにその構造を構築することです。 「ここでの文書は」非友好的なXML構造を強制的に使用して例えば
:
class User << ActiveResource::Base
def to_xml
xml =<<-EOS
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<platform_user>
<user xsi:type="userData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<userId>#{self.id}</userId>
<userName>#{self.name}</userName>
<addresses>
<address>
<address1>#{self.address1}</address1>
<addressZip>#{self.zip}</addressZip>
</address>
</addresses>
</user>
</platform_user>
EOS
xml.gsub(/\n|\t|\r/,"").strip #clean it up.
end
end
また、それは例えば、あなたの構造のために働くのXML Builderを使用することができます
def to_xml
xml = Builder::XmlMarkup.new()
xml.instruct! :xml, :version => "1.0", :encoding => "UTF-8", :standalone=>"yes"
xml.platform_user do
xml.user do
xml.userId self.id
...
end
end
end
幸運。