Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails路由为单个路径和通配符路径重定向_Ruby On Rails_Ruby_Redirect - Fatal编程技术网

Ruby on rails Rails路由为单个路径和通配符路径重定向

Ruby on rails Rails路由为单个路径和通配符路径重定向,ruby-on-rails,ruby,redirect,Ruby On Rails,Ruby,Redirect,在我的Rails应用程序的config/routes.rb中,我试图将任何以/support开头的url重定向到/contact。因此,前往/support/a/b的用户将重定向到/contact/a/b,前往/support的用户将重定向到/contact 到目前为止,有以下两条路线可以实现这一点: get '/support*all' => redirect(path: '/contact%{all}') get '/support' => redirect(path: '/co

在我的Rails应用程序的
config/routes.rb
中,我试图将任何以
/support
开头的url重定向到
/contact
。因此,前往
/support/a/b
的用户将重定向到
/contact/a/b
,前往
/support
的用户将重定向到
/contact

到目前为止,有以下两条路线可以实现这一点:

get '/support*all' => redirect(path: '/contact%{all}')
get '/support' => redirect(path: '/contact')

我的问题是,是否有可能有一条路线的行为与上述两条路线类似?

括号用于使线段成为可选的:

get '/support(/*all') => redirect(path: '/contact/%{all}')
但是如果
all
与任何内容都不匹配,即路径为
/support
时,则
redirect()
将产生错误。在这种情况下,重定向路径实际上是
'/contact/%{all}'
——不进行替换。因此,您需要为
all
提供一个默认值(注意
defaults:
get()
方法的一个参数):

您还可以为
redirect()
方法提供一个块,该块的返回值将用作重定向路径:

get '/support(/*all)', to: redirect {|path_params, req|  #Cannot use do-end to delimit this block.
  "/contact/#{path_params[:all]}"
}

关于块解决方案需要注意的是,当
all
与路径中的任何内容都不匹配时,params散列中的
all
将没有条目,因此
path\u params[:all]
将返回
nil
。随后,当您将
nil
插入字符串时,将调用,返回一个空白字符串。

@Simon Franzen,在我回答时没有看到您的答案。--啊。别担心,太棒了,我来试试!我会向你汇报事情的进展,这很有效。谢谢@7stud!我在
默认值
散列中进行了传递。块示例稍后可能会派上用场。谢谢你把它包括进来!
get '/support(/*all)', to: redirect {|path_params, req|  #Cannot use do-end to delimit this block.
  "/contact/#{path_params[:all]}"
}