我想使用以下行重定向路径中的路径:
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帮助程序,是否可以这样做?
答案 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"