访问routes.rb中的URL帮助程序

时间:2012-03-22 12:04:36

标签: ruby-on-rails

我想使用以下行重定向路径中的路径:

get 'privacy_policy', :controller => :pages, :as => 'privacy_policy'
get 'privacypolicy.php' => redirect(privacy_policy_url)

这样/privacypolicy.php就会被重定向到正上方定义的正确页面。

然而,它引发了以下错误:

undefined local variable or method `privacy_policy_url'

所以我猜测不能在routes.rb中使用URL帮助器。有没有办法在路由文件中使用URL帮助程序,是否可以这样做?

3 个答案:

答案 0 :(得分:6)

我知道我在这里有点晚了,但这个问题是谷歌搜索“在routes.rb中使用url_helpers”时的热门点击之一,我最初在遇到这个问题时找到了它,所以我会喜欢分享我的解决方案。

正如@martinjlowm在他的回答中提到的,当绘制新路线时,不能使用URL助手。但是,使用URL帮助程序定义重定向路由规则的一种方法。问题是,ActionDispatch::Routing::Redirection#redirect可以采用一个块(或List(1) - 能够),这是以后(当用户点击路线时)用两个参数调用, params request ,返回一个新的路由,一个字符串。并且因为在那一刻正确绘制了路径,所以在块内调用URL助手是完全有效的!

#call

此外,我们可以使用Ruby元编程设备添加一些糖:

get 'privacypolicy.php', to: redirect { |_params, _request|
  Rails.application.routes.url_helpers.privacy_policy_path
}

答案 1 :(得分:1)

URL帮助程序是从路径创建的。因此,在绘制新路线时它们将无法使用。

你将不得不使用gayavat的方法。

- 或 -

使用http://guides.rubyonrails.org/routing.html之类的确切网址进行重定向。

编辑:

如果它不只是一个'... php'路线,你可能想考虑制作一个重定向控制器。看看这里,如何进行提升:http://palexander.posterous.com/provide-valid-301-redirects-using-rails-route

在路线文件中,您应该在底部添加它,因此它不会干扰其他路线:

get '/:url' => 'redirect#index'

答案 2 :(得分:0)

类似的东西:

get 'privacypolicy.php' => "privacy_policy#show"