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

时间:2010-11-27 14:09:32

标签: ruby-on-rails

我想授予用户从其网站访问我的API(在heroku.com上托管)的权限。 但是当我希望它们允许发布到api时会出现一个奇怪的问题:

使用正确的action-url从正确的表单发送数据(例如“http://myapp.com/projects/123/tasks/321/todos”) - params被序列化并通过jQuery发送 - 我遇到了“ActionController :: MethodNotAllowed”带有附加信息:“只允许get和post请求”,使用:method =>重新路由到ApplicationController #index。 :选项

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

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

编辑: 我正在使用authlogic(不是设计:-D),对于:create动作,已经跳过了protect_from_forgery。

任何建议赞赏

3 个答案:

答案 0 :(得分:0)

我想这是因为rails试图保护你的表单CSRF攻击。

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

但我不确定这是否是在生产环境中处理此问题的正确方法。

答案 1 :(得分:0)

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

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

不知道您是否使用jquery-rails,但这需要在AJAX调用中为您设置_method参数和PUT / POST动词翻译。

答案 2 :(得分:0)

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