Rails перенаправляет маршруты для строки запроса

У меня проблема, недавно изменилось имя контроллера.

Я изменил файл маршрутов для приема вызовов с использованием старого имени контроллера, для людей с закладками, ссылающихся на старое имя:

get '/old/about', to: redirect('/new/about')
get '/old/report/:client', to: redirect('/new/report/%{client}')
get '/old/:sub_path', to: redirect('/new/%{sub_path}')

работает отлично. Но для вызовов с строкой запроса она блокирует его /report/ 200. например:

/старый/отчет/200 c_id = 257 &? Конец = 2013-10-19 & num_results = 294540 & начать = 2013-10-13

он разрешает URL-адрес:

старый/отчет/200

и показывает мне ошибку из-за отсутствия параметров. Вы знаете, что я могу сделать? (Я думал, что строка sub_path в маршрутах поможет, но не): (

Ответ 1

Вопрос, упомянутый Мэттом, помог мне разобраться в моем ответе (спасибо большое!). Это было немного другое для моего конкретного случая. Я оставляю ответ, который работал у меня в будущем.

match "/old/report/:client" => redirect{ |params, request| "/new/report/#{params[:client]}?#{request.query_string}" }

Ответ 3

Основываясь на ответе Алехандры, более подробный, но без ?, если нет строки запроса:

get "/old/report/:client", to: redirect{ |params, request| ["/new/report/#{params[:client]}", request.query_string.presence].compact.join('?') }

Итак, /old/report/:client?with=param станет /new/report/:client?with=param, и /old/report/:client станет /new/report/:client.