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

时间:2013-12-16 17:45:33

标签: xml curl ruby-on-rails-4

我正在玩一个非常简单的联系人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

2 个答案:

答案 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

需要注意的一些事项:

  • 如果未传递CSRF令牌,则请求失败(如果设置了protect_from_fogery)。你可以通过回调skip_before_filter :verify_authenticity_token
  • 来解决这个问题
  • params哈希不适用于符号。您需要访问这样的参数:params["contact"]["name"]