Rails POST不提取任何路径,查询或请求参数

问题描述:

我想授予用户从他们的网站访问我的API(托管在heroku.com上)。 但是出现一个奇怪的问题,当我想他们允许张贴到API:Rails POST不提取任何路径,查询或请求参数

从正确的形式发送正确的操作-URL(如“http://myapp.com/projects/123/数据任务/ 321/todos“) - params被序列化并通过jQuery发送 - 我遇到了一个”ActionController :: MethodNotAllowed“的附加信息:”只允许获取和发布请求“,重新路由到ApplicationController#index :method =>:options。

Rails没有从url中提取project_id(123)和task_id(321)的参数,也没有提供任何更多的request_parameters,path_parameters或query_parameters可用。

当我从外部网站POST,但不会发生从本地计算机上的HTML页发布时,会发生此行为。我的第一个想法是错误的编码,但如何解决这个问题。

编辑: 我正在使用authlogic(not devise :-D),对于:create操作,protect_from_forgery已经被跳过。

任何建议表示赞赏

由于跨域策略而产生的问题 - 请求来自另一个域 - 因为我使用的是最近支持CORS的浏览器,所以它首先发送OPTIONS请求以从服务器获知,该域名允许进行操作。

我想这是因为轨试图保护您的形式CSRF攻击。

你可以注释掉你的ApplicationController中的protect_from_forgery行来测试它。

但我不知道如果这是在生产环境中处理这个问题的正确方法。

+0

我编辑了我的帖子,所以现在很清楚,创建protect_from_forgery已经被跳过了 - thx对于您的建议无论如何! – 2010-11-27 16:55:49

好的。我会尝试回答这个正确的问题(见其他评论)。

所以我想到了这一点,我想知道,这是一个jQuery调用尝试PUT请求的情况?当您使用本地表单时,Rails将POST数据,但添加额外的_method字段来模拟PUT。

不知道您是否在使用jquery-rails,但是这需要在您的AJAX调用中设置_method参数以及PUT/POST动词转换。