34

我想将所有根请求重定向到一个url,但我想保留原始请求中使用的所有参数。/pages/home

所以:

http://myserver.com/?param1=value1&param2=value2

变成

http://myserver.com/pages/home?param1=value1&param2=value2

有几个关于在 a 中传递 params 的问题,redirect但我没有发现任何与传递请求的 params相关的问题。

4

4 回答 4

40
# routes.rb
root :to => redirect { |params, request| "/pages/home?#{request.params.to_query}" }

更新 1

您还可以使用request.params来构建新的path

root :to => redirect { |params, request| "/pages/#{request.params[:page]}.html?#{request.params.to_query}" }
于 2013-06-05T14:56:06.310 回答
38

?另一个答案有效,但如果没有参数,最后会留下 a 。

这似乎可以做到没有副作用:

root to: redirect(path: '/quick_searches/new')

希望能帮助到你!

于 2013-12-02T18:04:52.530 回答
17

在 Rails 5 中,这可以通过仅重写重定向中的路径组件来简洁地完成(因此将保留所有原始查询参数):

# in routes.rb
root to: redirect(path: '/pages/home')

相关文档链接:

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

于 2017-11-21T06:23:48.817 回答
1

基于@fguillen 对 Rails4 的回答

您需要在 routes.rb 中有两行

# in routes.rb
match "/pages/home", to: 'pages#index', via: :get    
match "/", to: redirect{ |params, request| [ "/pages/home", request.env["rack.request.query_string"] ].join("?") }, via: :all

如果没有参数,数组上的连接还会处理末尾的悬空问号。

于 2015-06-25T12:26:52.200 回答