HTTP GET变为POST方法

时间:2012-09-18 16:47:56

标签: ruby-on-rails-3 heroku routes thin http-get

我正在使用Ruby on Rails创建我的应用程序并在heroku上使用THIN服务器。

目前正在使用Rails 3.2.8

我遇到了这种我不明白的bizzar行为。

使用导航栏中的link_to帮助程序创建了一个链接。我想显式使用HTTP GET方法,所以我的ruby代码就是这样编写的:

<%=link_to "FAQ",help_path,:method=> :get %>

生成的html如下所示:

<a data-method="get" href="/en/help">FAQ</a>

如果我运行rake路由,help_path会显示如下:

help        (/:locale)/help(.:format)          static_pages#Help {:locale=>/en}

但是,当我看一下Firebug中的URL发生了什么(使用Net选项卡)时,看起来使用的是POST而不是GET方法。 所以不要看:

GET help

反而看到了这一点:

POST help

如果我删除了get方法的显式调用,如下所示:

<%=link_to "FAQ",help_path %>

结果如下:

<a href="/en/help">FAQ</a>

然后,在萤火虫中 - &gt;网,我甚至不会看到这个网址:获取帮助

在“网址”列下,它会显示以下内容:

? undefined 

如果URL未定义,heroku上的Rails应用程序将尝试单独加载每个资产文件,而不是加载预编译的清单资产文件。

有没有人遇到这种情况?我无法弄清楚在Rails或heroku的魔法黑盒子中的位置,瘦服务器可能会改变get和post方法的行为。

非常感谢任何建议!

1 个答案:

答案 0 :(得分:4)

我将开始说我没有看到为什么要建立一个link_to并明确说明:get作为:方法。无论如何,这是默认行为。

对于您的问题:您看到一个POST请求,因为当您使用link_to的:method选项时,它会生成一个表单,该表单会发送到所需的URL和带有所需请求类型的_method隐藏输入(POST / PUT / DELETE / GET )。 Rails知道如何处理包含_method参数的POST请求,并使用正确的路由进行响应。在您的情况下 - 与GET操作匹配的路由。

您可以在link_to here上阅读更多内容。

编辑:

我更彻底地阅读了文档,看起来:method选项不支持:get作为值。

相关问题