rails 4如何生成_url和_path助手

时间:2014-07-15 11:16:06

标签: ruby-on-rails url-redirection

我对Rails 4如何使用_url和_path助手生成网址感到困惑。 我的配置是我有一个硬件设备处理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 - 这是否有不足之处?

提前致谢

安迪

2 个答案:

答案 0 :(得分:3)

简而言之:

_url提供整个路径(域名和协议)。

_path在'/'之后给出路径(没有域名或协议)。

您使用其中一种的原因有多种。

更长的形式,您可以阅读此页面:http://guides.rubyonrails.org/routing.html。那里有更多的信息可以帮助你,但它写得很好,我总结事情的尝试可能会让你了解重要的细节。


直接解决您的问题:

  • 为什么帮助程序在视图和控制器中的工作方式不同?

http://guides.rubyonrails.org/routing.html可能比我更好地回答(我不确切地知道你要做什么)。

您还可以阅读:

  

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

。 。 。正如此处所述:https://stackoverflow.com/a/2350837/1026898

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

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

  • 那有不足之处吗?

从技术上来说,如果你以某种方式做到这一点,可能会有一些额外的开销,如果你以另一种方式做到这一点,你可以避免。然而,真正的问题是,只有当另一个开发人员进来并且必须在你身后做出改变时才会出现。如果您使用的是奇怪的解决方案(一种与帮助者的预期用途不同的解决方案),那么他们很难理解您为什么按照您的方式做事。

答案 1 :(得分:0)

我想这是因为_path会生成相对路径,而_url会生成完整的网址。

现在,当您在控制器中时,_path帮助程序将尝试重定向到nginx端口,因为它是处理请求的位置。然而,当您在视图中时,相对路径可以正常工作。

我建议您更改为控制器中的_url

此外,这些方法是在定义路由时自动创建的,在RESTful路由的情况下,它们遵循可预测的约定。

运行'rake routes'是查看正在生成的所有路由的有用方法。

我建议您阅读http://guides.rubyonrails.org/routing.html以获取更多信息。