有没有办法在 Rails 上的 Ruby 中保持 POSTed XML 的完整性?

Is there a way to keep POSTed XML in tact in Ruby on Rails?

我的 Rails 应用程序中有一个 REST API,用户将向其发布 XML。我知道 Rails(在这种情况下可能是 Rack)将发布的数据转换为参数散列。

我很好奇是否有办法让 Rails 不将 XML 转换为参数散列?相反,我想将 XML 作为字符串获取。我宁愿不将 Rails 转换为散列,然后使用 to_xml 将其转换回 xml 字符串。

XML 数据应作为 POST 请求中的参数发送。在您的单元测试中,它看起来像这样:

xml = <<-XML
  <?xml version="1.0" encoding="UTF-8"?>
    <hash>
      <foo type="integer">1</foo>
      <bar type="integer">2</bar>
    </hash>
XML
post :my_api_path, { 'model_data': xml }

在您的控制器中,您将提取 model_data 参数(如果您想从中提取数据,则将其解析为 XML):

class XmlPassingController
  def save
    # XML as a string
    pp params[:model_data]
    # XML used for attributes to create a model instance
    my_model = MyModel.from_xml(params[:model_data])
    pp my_model
  end
end

这是我需要在控制器操作中执行的操作,以便从 POST 请求中获取原始 xml:

request.raw_post

请求的 raw_post 方法将 return 请求的原始主体。