【问题标题】:Is there a way to keep POSTed XML in tact in Ruby on Rails?有没有办法在 Ruby on Rails 中保持 POSTed XML 的完整?
【发布时间】:2018-02-09 16:51:31
【问题描述】:

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

我很好奇是否有办法让 Rails 不将 XML 转换为 params 哈希?相反,我想将 XML 作为字符串。我宁愿不要让 Rails 转换为哈希,然后使用 to_xml 将其转换回 xml 字符串。

【问题讨论】:

    标签: ruby-on-rails ruby xml ruby-on-rails-3 rack


    【解决方案1】:

    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
    

    【讨论】:

    • 谢谢。我希望避免为此创建模型,但这似乎是不可避免的,因为我不喜欢 Ruby 引入的“”节点。
    • @mstrom 您始终可以创建一个自定义方法,根据您希望它们设置的方式设置属性:my_model.some_field = my_xml['different_fields'][23]
    • 好的,知道我需要什么了。我在下面发布了一个答案。感谢您的帮助。
    【解决方案2】:

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

    request.raw_post
    

    请求的raw_post 方法将返回请求的原始正文。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多