リダイレクトすべてルートリクエストを/pages/home
urlにしたいのですが、元のリクエストで使用されたすべてのパラメータを保持したいと思います。
そう:
http://myserver.com/?param1=value1¶m2=value2
になる
http://myserver.com/pages/home?param1=value1¶m2=value2
redirect
でパラメータを渡すことに関するいくつかのSO質問がありますが、リクエストのパラメータの受け渡しに関連する質問は見つかりませんでした。
# routes.rb
root :to => redirect { |params, request| "/pages/home?#{request.params.to_query}" }
request.params
で遊んで、新しいpath
を作成することもできます。
root :to => redirect { |params, request| "/pages/#{request.params[:page]}.html?#{request.params.to_query}" }
もう1つの答えは機能しますが、パラメーターがない場合に備えて、最後に?
を残します。
これは副作用なしでトリックを行うようです:
root to: redirect(path: '/quick_searches/new')
それが役に立てば幸い!
Rails 5では、リダイレクト内のパスコンポーネントのみを書き換えるだけで、これを簡潔に実行できるようになりました(したがって、元のクエリパラメータはすべて保持されます)。
# in routes.rb
root to: redirect(path: '/pages/home')
関連するドキュメントリンク:
http://api.rubyonrails.org/classes/ActionDispatch/Routing/Redirection.html
Rails4に対する@fguillenの回答に基づいて構築
ルートには2行必要です。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
配列の結合は、パラメーターがない場合に備えて、最後にぶら下がっている疑問符も処理します。