Маршруты Rails: как передать "все" параметры запроса в перенаправление
Я хочу перенаправить все корневые запросы на url /pages/home
, но я хочу сохранить все параметры, используемые в исходном запросе.
Итак:
http://myserver.com/?param1=value1¶m2=value2
становится
http://myserver.com/pages/home?param1=value1¶m2=value2
Есть несколько вопросов о прохождении параметров в redirect
, но я не нашел связанных с ними параметров запроса.
Ответы
Ответ 1
# 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
Другой ответ работает, но в конце остается ?
в случае отсутствия параметров.
Это похоже на трюк без побочных эффектов:
root to: redirect(path: '/quick_searches/new')
Надеюсь, что это поможет!
Ответ 3
В Rails 5 это можно сделать кратко, просто переписав ТОЛЬКО компонент пути в перенаправлении (так что все исходные параметры запроса будут сохранены):
# in routes.rb
root to: redirect(path: '/pages/home')
Ссылка на соответствующую документацию:
http://api.rubyonrails.org/classes/ActionDispatch/Routing/Redirection.html
Ответ 4
Основываясь на ответе @fguillen для Rails4
Вам нужны две строки в маршрутах. 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
Соединение в массиве также обрабатывает вопросительный знак в конце, если нет параметров.