Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何将Rails 3更改为xml编码_Ruby On Rails_Xml_Ruby On Rails 3_Ruby 2.1 - Fatal编程技术网

Ruby on rails 如何将Rails 3更改为xml编码

Ruby on rails 如何将Rails 3更改为xml编码,ruby-on-rails,xml,ruby-on-rails-3,ruby-2.1,Ruby On Rails,Xml,Ruby On Rails 3,Ruby 2.1,我在一个模型上使用Rails 3转换为xml,该模型有几个选项,如include、except和methods。 因此,这不是我第一次使用到xml 我在做这样的事情: to_xml(include: { order: { methods: [:my_avg], except: [:this_attr, :and_this_attr ] }, customer: {} }) XML结果: <?xml version="1.0" encoding="UTF-8"

我在一个模型上使用Rails 3转换为xml,该模型有几个选项,如include、except和methods。 因此,这不是我第一次使用到xml

我在做这样的事情:

to_xml(include: {
  order: {
    methods: [:my_avg],
    except:  [:this_attr, :and_this_attr ]
  },
  customer: {}
})
XML结果:

<?xml version="1.0" encoding="UTF-8"?>
<my-model>
  <attr1 type="integer">12</attr1>
  <attr2 type="integer">12</attr2>
  <order>
    <name>foo</name>
    <desc>bar</desc>
    <my-avg>
      <avg type="integer">123</avg>
      <foo>ok</foo>
    </my-avg>
  </order>
  <updated-at type="datetime">2014-04-14T11:16:56-03:00</updated-at>
</my-model>

12
12
福
酒吧
123
好啊
2014-04-14T11:16:56-03:00
但是现在我想更改xml编码ISO_8859_1,而不是utf8

我在ActiveRecord::Serialization模块上没有看到编码选项

如果我只添加一个编码选项,它将创建一个XML属性,而不是更改此XML上的编码:

<?xml version="1.0" encoding="UTF-8"?>
<my-model>
  <attr1 type="integer" encoding="ISO-8859-1">12</attr1>
  <attr2 type="integer" encoding="ISO-8859-1">12</attr2>
  <order>
    <name>foo</name>
    <desc>bar</desc>
    <my-avg>
      <avg type="integer">123</avg>
      <foo>ok</foo>
    </my-avg>
  </order>
  <updated-at type="datetime">2014-04-14T11:16:56-03:00</updated-at>
</my-model>

12
12
福
酒吧
123
好啊
2014-04-14T11:16:56-03:00

有没有办法使用ActiveRecord的to_xml指定编码?

您可以在您的模型中覆盖
to_xml
,并指定编码。类似这样的方法可能会奏效:

class ModelName < ActiveRecord::Base
  def to_xml(options = {})
    require 'builder'
    options[:indent] ||= 2
    xml = options[:builder] ||= ::Builder::XmlMarkup.new(indent: options[:indent])
    xml.instruct! :xml, :version=>"1.0", :encoding => "ISO-8859-1"
    xml.level_one do
      xml.tag!(:second_level, 'content')
    end
  end
end
classmodelname“1.0”,:encoding=>“ISO-8859-1”
xml.level_one do
xml.tag!(:第二级“内容”)
结束
结束
结束

它返回正确编码的XML,但确实覆盖了默认行为。所以内容只是:“是的,你必须自己实现。因为rails默认情况下不允许你覆盖编码,所以你必须自己进行修补或实现。为了获得一些灵感,