2011-01-18 16 views
5

私はto_xml与える奇妙な結果

{"New York"=>33, :Versailles => 3231}.to_xml 

は私がいない、 "ニューヨーク" をdasherizeするレールを期待しているだろう

<?xml version=\"1.0\" encoding=\"UTF-8\"?> 
<hash> 
    <Versailles type=\"integer\">3231</Versailles> 
    <New York type=\"integer\">33</New York> 
</hash> 

得ることをやるのはいつですか?

答えて

2

この問題は、プルリクエストの合併を経て閉じている445:https://github.com/rails/rails/pull/445

スペースが今dasherizedされます(。・民間_dasherize方法にスペースを処理するように拡張された)

{「ニューヨーク」=> 33} .to_xmlこのLを置くため

..<New-York type=\"integer\">33</New-York>..

おかげもたらしますighthouseチケット&のstackoverflowの質問(これは議論の詳細を追加);提供されたすべての情報の助けを借りて、私は最初のレールをコミットすることができました!

0

私も同じことを見ています。

には:dasherizeのオプションがあります。

一部の設定はオプションで利用できます。 [...] この動作は、only、:except、:skip_instruct、:skip_types、:dasherize、:camelize [...] デフォルトではすべての列名をdasherizeしますが、この設定を無効にすることができます:ダシェリゼを偽にする。設定:camelizeをtrueに設定すると、すべての列名がキャメラライズされます。これも上書きされます:dasherize。

だから、それは最低でも、次のようになります。

asdf.to_xml(:dasherize => true) 

はそれを行うと、それを強制する必要があり:camelizeオプションを追加する必要があります。

=> "<?xml version="1.0" encoding="UTF-8"?>\n<Hash>\n <New York type="integer">33</New York>\n <Versailles type="integer">3231</Versailles>\n</Hash>\n" 

だから、誰かがアノモリをスプラインすることができます。

+0

dasherizeは、ダッシュするスペースではなく、ダッシュに下線を変更しています。 camelizeと同じこと: "New_Yorkは素晴らしい" .camelize = "NewYorkは素晴らしい"それにもかかわらず、to_xmlは不正な形式のxmlで私たちを失望させるべきではありません – standup75

+0

dasherizeとspaceについて、良い点! Duh !,はい、to_xmlは有効なXMLを表示するか、例外を発生させるか、少なくとも問題を通知する方法が必要です。 –

0

通常、データベースフィールドには空白が含まれていないため、#to_xmlのコンテキスト内の例はガベージ・イン・ガーベッジアウトの状況です。