Подтвердить что ты не робот

Маршруты Rails: как передать "все" параметры запроса в перенаправление

Я хочу перенаправить все корневые запросы на url /pages/home, но я хочу сохранить все параметры, используемые в исходном запросе.

Итак:

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

становится

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

Есть несколько вопросов о прохождении параметров в redirect, но я не нашел связанных с ними параметров запроса.

4b9b3361

Ответ 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

Соединение в массиве также обрабатывает вопросительный знак в конце, если нет параметров.