Rails的路由:如何在重定向中传递“所有”请求参数

时间:2013-06-05 14:56:06

标签: ruby-on-rails-3 redirect routes

我希望将所有 root请求重定向到<{1}}网址,但我希望保留原始请求中使用的所有参数。

所以:

/pages/home

变为

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

关于在http://myserver.com/pages/home?param1=value1&param2=value2 中传递参数有几个SO问题,但我没有发现任何与传递请求的参数相关的信息。

4 个答案:

答案 0 :(得分:35)

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

这似乎没有副作用的伎俩:

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

希望它有所帮助!

答案 1 :(得分:33)

# 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}" }

答案 2 :(得分:9)

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

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

相关文档链接:

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

答案 3 :(得分: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

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