我可以在Rails数据库中通过发布XML数据来代替表单数据来创建一个新条目吗



我正在玩一个非常简单的contacts Rails应用程序。我有一个/contacts路由,可以POST在contacts表中添加条目(使用scaffold)。相反,我希望使用XMLHttpRequest在POST中发送XML数据(而不是FORM数据)。这个请求有效,但是Rails中的params对象没有显示我发送的数据(使用.inspect进行调试)

这是我的卷曲命令:

curl-H"内容类型:text/xml"-d@contact.xml-X POSThttp://www.acme.com:3000/contacts

contact.xml文件看起来像:

<contact>
  <name>Joe</name>
  <email>joe@acme.com</email>
  <phone>+12148622544</phone>
</contact>

这与联系人表中的字段完全对应。

我哪里错了?

提前感谢

Uinsg Rail 4

实际上,XML解析器是从Rails 4中的ActionPack中删除的。您可以在这里使用gem将其添加回:actionpack-xml_parser。这样做将把XML解析成params散列。

更新:当Rails团队将XML参数化为params散列时,这个gem的实现似乎会杀死请求主体中的实际XML。这个fork将XML保持在主体中(在我看来)应该是:https://github.com/mxrguspxrt/actionpack-xml_parser

我以为Rails会自动将xml解析为params哈希,但事实并非如此。

您应该能够手动解析发送的xml。你的控制器应该看起来像这样:

def new
  xml = request.body.read
  params = Hash.from_xml(xml)
  # do something with params hash...
end

需要注意的几件事:

  • 如果未通过CSRF令牌(如果设置了protect_from_fogery),则请求将失败。您可以通过回调skip_before_filter :verify_authenticity_token绕过此问题
  • params哈希将不适用于符号。您需要访问如下参数:params["contact"]["name"]

最新更新