ActiveRecord#to_xmlの日本語対応版(?)を作る
ActiveRecordをXMLにシリアライズするのは非常にお気軽で良いのですが、日本語が数値参照形式になってしまいます。
katochan = Member.create(:name => '加藤茶', :email => 'katochan@hoge.com') puts katochan.to_xml
結果はこのとおり。
<?xml version="1.0" encoding="UTF-8"?> <member> <created-at type="datetime">2008-06-02T17:46:34+09:00</created-at> <id type="integer">1</id> <mail>katochan@hoge.com</mail> <name>加藤茶</name> <updated-at type="datetime">2008-06-02T17:46:34+09:00</updated-at> </member>
d:id:ehara_kw:20071221とd:id:eclipse-a:20070905を参考に、強引ですがこういう対処を取ってみました。
class ActiveRecord::Base def to_jp_xml(options, &block) return self.to_xml(options, &block).gsub(/&#(?:(\d*?)|(?:[xX]([0-9a-fA-F]{4})));/) { [$1.nil? ? $2.to_i(16) : $1.to_i].pack('U') } end end
to_xmlメソッドをオーバーライドしてもいいかな?と思ったけど、小心者なのであえて別メソッドにしています・・