Rails-基于路线名称的路线重定向

时间:2019-02-20 08:36:48

标签: ruby-on-rails ruby routes

当前,如果要重定向到特定页面,则必须使用to: redirect('/this-is-some-url') ..

我想知道是否可以使用Route Name之类的to: redirect('route_name')重定向到某个页面

我尝试下面的代码,但是不起作用:

get '/house-url', to: redirect('home')          #the value is route name
get '/home-url', to: 'home_ctrl#show', as: 'home'

2 个答案:

答案 0 :(得分:3)

您可以使用url路径进行重定向,但不能使用路由名称进行重定向。

get '/house-url', to: redirect('/home-url')
  

将任何路径重定向到另一路径

https://guides.rubyonrails.org/routing.html#redirection

https://api.rubyonrails.org/classes/ActionDispatch/Routing/Redirection.html

编辑

我找到了更好的方法:

1。创建RedirectToHome

在文件RedirectToHome中创建一个名为redirect_to_home.rb的类。

您可以在您的app/controllers/

中创建该示例
class RedirectToHome
  def call(params, request)
    Rails.application.routes.url_helpers.home_path # this is the path where to redirect
  end
end

2。编辑您的route.rb

然后将RedirectToHome添加到要重定向的路由中

  get '/home-url', to: 'home_ctrl#show', as: 'home'
  get '/house-url' => redirect(RedirectToHome.new)

答案 1 :(得分:0)

因此,如果我正确阅读了您的问题,您想将请求的路由传递给重定向吗?

您可以执行以下操作:

get '/houses/:house_id', to: redirect { |path_params, req| "/houses/#{path_params[:house_id]}" }