阅读 Ruby on Rails 指南,我看到这个示例:
get '/stories/:name', to: redirect('/articles/%{name}')
我很困惑,这什么时候会有帮助?你不能像这样指向控制器/动作的路径吗?
get '/stories/:name', to: 'articles#show'
他们做的事情非常不同。
get '/stories/:name', to: redirect('/articles/%{name}')
将导致路由器直接响应:
HTTP/1.1 301 Moved Permanently
Location: http://localhost:3000/articles/a_tall_tale
如果您想将旧路由的请求重定向到新路由并告诉客户端使用新 URL,但您无法(或太懒)在 HTTP 服务器层上设置重定向,这非常有用(其开销甚至更少)。
get '/stories/:name', to: 'articles#show'
将请求分派到相关控制器并返回它生成的任何响应。
如果目标是支持旧版 URL,这实际上不会告诉客户端使用新 URL,除非您从控制器重定向,这样做的效率会比从路由器执行的效率低。