【问题标题】:how use url_for with a redirected route in Rails如何在 Rails 中使用带有重定向路由的 url_for
【发布时间】:2014-12-17 16:09:31
【问题描述】:

我在 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 之类的链接

但现在我需要使用构建 http.//...n/proveedores 的 url_for 助手。 但是怎么做?

url_for (controller: "admin", action: "external_login") 不返回 "/proveedores" 而是返回 "/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"

【问题讨论】:

  • 崩溃是什么意思?你能发布错误吗?
  • 是的,抱歉,已添加到问题中
  • 您使用的是什么版本的 Rails? match 在 Rails 4 中是不允许的。
  • 我正在使用 Rails 4,我不知道我不能使用 match,我在 routes.rb 中有很多 match ¿?并且没有警告
  • match 可以在 rails 4 中使用,但您正在使用 :via 指定的一个或多个动词。所以这一切都很好。

标签: ruby-on-rails routes


【解决方案1】:

Routes 会为您生成两种类型的助手,第一种是 routes_name_path,另一种是 routes_name_url

_url helper 提供绝对路径,_path helper 提供相对路径。

您可以使用_url 辅助方法代替url_for,这将类似于admin_proveedores_url

【讨论】:

  • 是的,就是最简单的解决方案,我已经添加到我的问题中了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-29
  • 2021-03-02
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多