如何在Rails中使用url_for和重定向路由

时间:2014-12-17 16:09:32

标签: ruby-on-rails routes

我在routes.rb

中有这个
  match '/external_login' => 'admin#external_login', :as => :external_login, :via => [:get,:post]

我想生成一个友好的网址(对于我的西班牙公众)“provedores”

所以我添加了routes.rb:

get '/proveedores', to: redirect('/external_login') 

使用http。// ... n / proveedores

之类的链接

但是现在我需要使用构建http ////...//veveedores的url_for帮助器。 但是如何?

url_for (controller: "admin", action: "external_login")不要返回“/ prove_ores”reuturn“/ external_login”而是

如果我输入routes.rb

  match '/proveedores' => 'admin#external_login', :as => :external_login, :via => [:get,:post]

在浏览器http:... localhost:3000 / proveedores

中键入时崩溃
Routing Error
No route matches [GET] "/external_login"

解决方案,但我想我错过了一些

在路线中,有两行:

  match '/proveedores', to: 'admin#external_login', :as => :external_login, :via => [:get,:post]
  get '/external_login', to: "admin#external_login"

现在我可以这样做:

2.0.0-p451 :003 > url_for(controller: "admin", action: "external_login")
 => "http://10.210.nn.nnn:3000/proveedores" 

有人可以解释,如果这是正确的,或者可能有一个更简单的解决方案

由于


感谢Ashutosh Tiwari,解决方案比它看起来更简单。使用_url帮助程序代替url_for(....

routes.rb中:

 match '/external_login', to: 'admin#external_login', :as => :external_login, :via => [:get,:post]
  get '/proveedores', to: redirect('/external_login') 

并使用proveedores_url我获得了完整的网址:"http://10.210.nn.nnn:3000/proveedores"

1 个答案:

答案 0 :(得分:2)

为您生成两种类型的帮助者的路由,第一个是routes_name_path,另一个是routes_name_url

_url助手为您提供绝对路径,_path助手提供相对路径。

您可以使用_url辅助方法代替url_for admin_proveedores_url