Во-первых, я довольно новичок в Ruby, но нахожусь в состоянии поддерживать и настраивать довольно сложное веб-приложение.
Меня недавно попросили изменить все URL, которые были в формате "https://hostname.com/opportunities/../..", чтобы иметь форму" https://hostname.com/accounts/../..". Я сделал это, просто изменив файл rout.rb и заменив /abilities / routs на / account / и сохранив те же имена контроллеров. Кажется, это послужило намеченной цели. Тем не менее, были некоторые непредвиденные последствия, а именно любой, кто все еще использует ссылки со ссылками на старые URL, получает ошибку 404.
Я думал, что мне нужно перенаправить все старые маршруты на новые маршруты, но за исключением базового маршрута (т. Е. https://hostname.com/opportunities) все URL с дополнительными уровнями детализации не могут генерироваться динамически. Вместо этого return буквально в форме " https: /// account /: region /: состояние /: структура /: тип /: id "
Пожалуйста, дайте мне знать, что мне нужно сделать, чтобы достичь желаемого результата. Должен ли я использовать подстановочный знак в перенаправлении, или какой-то другой трюк? Как я могу получить два набора маршрутов для использования одних и тех же контроллеров (если на самом деле я правильно понял, что это то, что мне нужно?)
get '/accounts/:id', to: 'opportunities#show', constraints: {id: /\d+/}, as: 'opportunity'
get '/accounts/:region/:state/:structure/:type/:id', to: 'opportunities#show', constraints: {id: /\d+/}, as: 'long_opportunity'
get '/accounts/:region/:state/:term/:type/:id', to: 'opportunities#show', constraints: {id: /\d+/}, as: 'short_opportunity'
get '/accounts(/:region(/:state(/:structure(/:type))))', to: 'opportunities#index', as: 'opportunities'
post '/accounts/:id/consider', to: 'opportunities#possible', constraints: {id: /\d+/}, as: 'possible_opportunity'
get "/opportunities/", to: redirect("/accounts/", status: 302)
get '/opportunities/:id', to: redirect('/accounts/:id', status: 302)
get '/opportunities/:region/:state/:structure/:type/:id', to: redirect('/accounts/:region/:state/:structure/:type/:id', status: 302)
get '/opportunities/:region/:state/:term/:type/:id', to: redirect('/accounts/:region/:state/:term/:type/:id', status: 302)
get '/opportunities(/:region(/:state(/:structure(/:type))))', to: redirect('/accounts(/:region(/:state(/:structure(/:type))))', status: 302)