我正在玩一个非常简单的联系人Rails应用程序。我有一个/ contacts路由,我可以POST来添加联系人表中的条目(使用scaffold)。我希望使用XMLHttp Request在POST中发送XML数据(而不是FORM数据)。请求有效,但Rails中的params对象不显示我发送的数据(使用.inspect进行调试)。
这是我的卷曲命令:
curl -H“Content-Type:text / xml”-d @ contact.xml -X POST http://www.acme.com:3000/contacts
并且contact.xml文件如下所示:
<contact>
<name>Joe</name>
<email>joe@acme.com</email>
<phone>+12148622544</phone>
</contact>
这完全对应于联系人表格中的字段。
我哪里错了?
提前致谢
Uinsg Rail 4
答案 0 :(得分:3)
实际上,XML解析器已从Rails 4中的ActionPack中删除。您可以在此处使用gem添加它:actionpack-xml_parser。这样做会将XML解析为params散列。
<强>更新强>
看起来Rails团队实现这个gem会在请求体内将XML参数化为params
哈希值时杀死实际的XML。这个fork将XML保存在正文中,因为它(在我看来)应该是:
https://github.com/mxrguspxrt/actionpack-xml_parser
答案 1 :(得分:0)
我认为Rails会自动将xml解析为params
哈希值,但事实并非如此。
您应该能够手动解析发送的xml。你的控制器应该是这样的:
def new
xml = request.body.read
params = Hash.from_xml(xml)
# do something with params hash...
end
需要注意的一些事项:
protect_from_fogery
)。你可以通过回调skip_before_filter :verify_authenticity_token
params
哈希不适用于符号。您需要访问这样的参数:params["contact"]["name"]