我正在使用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方法的行为。
非常感谢任何建议!
答案 0 :(得分:4)
我将开始说我没有看到为什么要建立一个link_to并明确说明:get作为:方法。无论如何,这是默认行为。
对于您的问题:您看到一个POST请求,因为当您使用link_to的:method选项时,它会生成一个表单,该表单会发送到所需的URL和带有所需请求类型的_method隐藏输入(POST / PUT / DELETE / GET )。 Rails知道如何处理包含_method参数的POST请求,并使用正确的路由进行响应。在您的情况下 - 与GET操作匹配的路由。
您可以在link_to here上阅读更多内容。
编辑:
我更彻底地阅读了文档,看起来:method选项不支持:get作为值。