我正在玩一个非常简单的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"]