Rails 4 如何生成 _url 和 _path 帮助器

And*_*ndy 0 redirect ruby-on-rails

我对 Rails 4 如何使用 _url 和 _path 帮助器生成 url 感到困惑。我的配置是我有一个处理 https 请求的硬件设备,该设备路由到提供静态文件的 nginx 并将 Rails 请求引用到瘦服务器。

在我的 config/environments/production.rb 中我有

config.action_controller.default_url_options = {host: "mydomain", protocol: 'https'}

如果我使用 `_path 帮助程序在控制器中发出重定向,它会尝试重定向到 nginx 端口。(无法从外部访问)如果我使用 _url 帮助程序在控制器中发出重定向,它会根据配置正确重定向。

在视图中,link_to _path 和 _url 生成正确的 url

所以我有两个问题为什么助手在视图和控制器中的工作方式不同。有没有办法使用 _path 生成正确的 url,或者我应该将所有内容更改为 _url - 这有什么缺点吗?

提前致谢

安迪

Ecn*_*lyr 5

简而言之:

\n\n

_url给出完整路径(域名和协议)。

\n\n

_path在“/”之后给出路径(无域名或协议)。

\n\n

您选择其中一种而不是另一种的原因有多种。

\n\n

您可以阅读此页面的详细内容:http://guides.rubyonrails.org/routing.html。那里有更多信息可以帮助您,但它写得很好,我试图总结的内容可能会让您缺少重要的细节。

\n\n
\n\n

直接解决您的问题:

\n\n
    \n
  • 为什么助手在视图和控制器中的工作方式不同?
  • \n
\n\n

http://guides.rubyonrails.org/routing.html的回答可能比我更好(我不知道你到底想做什么)。

\n\n

您还可以阅读以下内容:

\n\n
\n

*_path 用于视图,因为 ahref 隐式链接到当前 URL。所以一遍又一遍地重复它\xe2\x80\x99d会浪费字节。但在控制器中,redirect_to 需要 *_url,因为 HTTP 规范要求 3xx 重定向中的 Location: 标头是完整的 URL。

\n
\n\n

。。。正如此处发布的:https ://stackoverflow.com/a/2350837/1026898

\n\n
    \n
  • 有没有办法使用 _path 生成正确的 url,还是应该将所有内容更改为 _url?
  • \n
\n\n

根据上面提供的信息使用您的判断来做出决定。您是否正在尝试重定向到另一个域(我怀疑不是)?如果是,您想使用“_url”而不是“_path”。如果不是,您可能想使用_path. 如果不知道你的具体情况,很难说。

\n\n
    \n
  • 这有什么缺点吗?
  • \n
\n\n

从技术上讲,如果您以一种或另一种方式进行操作,可能会产生一些额外的开销,而如果您以另一种方式进行操作,则可以避免这些开销。然而,只有当另一个开发人员介入并且必须在您身后进行更改时,真正的问题才会出现。如果您使用奇怪的解决方案(与助手的预期用途不同的解决方案),他们会很奇怪地弄清楚您为什么这样做。

\n