У меня есть ситуации двойного пространства имен, где мои контроллеры выглядеть следующим образом:Перенаправление из пространства имен контроллера с использованием хэш
CandidateController
Candidate::PerformanceController
Candidate::Performance::ReviewController
В Rails 2, я был в состоянии использовать redirect_to
от контроллера Candidate::Performance::ReviewController
для того, чтобы перенаправить к действию в CandidateController
, например, так:
class Candidate::Performance::ReviewController < ApplicationController
before_filter :ensure_manager
# ...
def ensure_manager
if !current_user.manager?
flash[:warning] = t(:must_be_manager)
redirect_to :controller => '/candidate', :action => :index
end
end
end
/
в controller => '/candidate'
позволит Rails перенаправлять от app.com/performance/reviews
к app.com/candidate
.
Однако, похоже, что это не работает в Rails 3.1. Вместо этого мой redirect_to
отправляется в app.com/candidate//candidate
. Каков правильный способ указания «абсолютного» контроллера в хеше redirect_to
(т. Е. Без использования помощника пути)?
Update: Я знаю, что это было бы гораздо проще, если бы я просто использовать именованные маршрутные хелперы (т.е. candidate_path
.). К сожалению, в нашей кодовой базе много устаревшего кода, который не использует маршрутизацию RESTful и вместо этого использует стандартный маршрут «catch-all»; то есть. у нас есть много действий без названного маршрута для возврата.
Просто нашел тот же пост при поиске документа. Угадайте, что url_for, на который я смотрел, в документе был устаревшим. http://apidock.com/rails/ActionController/Base/url_for – Robin