ruby-on-rails - 如何在 Rails 中使用 url_for 和重定向路由

标签 ruby-on-rails routes

我在routes.rb中有这个

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

我想生成一个友好的网址(为我的西类牙公众)“proveedores”

所以我在routes.rb中添加了:

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

使用 http.//...n/proveedores 等链接

但现在我需要使用 url_for 帮助程序来构建 http.//...n/provedores。 但是如何呢?

url_for( Controller :“admin”,操作:“external_login”) 不要返回“/provedores”而是返回“/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"

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

在 route ,有两行:

  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(....

路线.rb:

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

并使用provedores_url我得到完整的url:“http://10.210.nn.nnn:3000/provedores”

最佳答案

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

_url 帮助程序为您提供绝对路径,而 _path 帮助程序提供相对路径。

您可以使用_url辅助方法而不是url_for,它类似于admin_proveedores_url

关于ruby-on-rails - 如何在 Rails 中使用 url_for 和重定向路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27529850/

相关文章:

angularjs - 偶尔 $compile :tpload errors

ruby - 如何从 Sinatra 路由末尾删除 '/'

ruby-on-rails - 使用 Active Record 选择一个随机记录的最有效方法是什么

斯卡拉玩 2.0 : Is it possible to use case classes in "routes"

javascript - 将 Rails javascript 公开,同时保留 ruby​​ 代码?

ruby-on-rails - 对 HTTP POST 参数命名约定的偏好?

javascript - Angular 6 中的数据未通过路由传递

asp.net-mvc - Asp.Net MVC 路由 - 处理具有相同签名的多个路由?

ruby-on-rails - 使用包含多个关联和单独的条件

ruby-on-rails - db :reset 后 Postgres 函数未保留