3

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

目前使用 Rails 3.2.8

我遇到了我不理解的这种奇怪的行为。

使用导航栏中的 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>

然后,在 firebug -> Net 中,我什至看不到这个 URL:GET help

在 URL 列下,它将改为显示:

? undefined 

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

有没有人经历过这种情况?我无法完全弄清楚 Rails 或 heroku 或瘦服务器的神奇黑匣子在哪里可以改变 get 和 post 方法的行为。

非常感谢任何建议!

4

1 回答 1

4

我将开始说,我看不出为什么要创建 link_to 并明确声明 :get 作为 :method 的原因。无论如何,这是默认行为。

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

您可以在此处阅读有关 link_to的更多信息。

编辑:

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

于 2012-09-18T16:58:14.583 回答