Я работаю над приложением Rails3, которое имеет контроллер Pages и две страницы: pages # main и pages # status.На главной странице есть ссылка, которая при нажатии переходит в статус.У пользователя уже есть информация профиля, и если часть этой информации профиля отсутствует, я хочу, чтобы статус перенаправлялся на главную.Я получаю таинственное двойное перенаправление, которое я не могу решить.Вот контроллер страниц:
def main
@current_user = current_user
end
def status
@current_user = current_user
if @current_user.address.blank?
redirect_to :action => "main" and return
end
end
Все работает плавно, пока условие не выполняется, но как только оно появляется, я получаю ошибку:
Визуализация и/ или перенаправление было вызвано несколько раз в этом действии.Обратите внимание, что вы можете вызывать только перенаправление render или не более одного раза за действие.Также обратите внимание, что ни перенаправление, ни рендеринг не прекращают выполнение действия, поэтому, если вы хотите выйти из действия после перенаправления, вам нужно выполнить что-то вроде «redirect_to (...) и return».
Действительно, redirect_to вызывается дважды (одна и та же строка, согласно трассировке; не знаю, почему).Мне интересно, это проблема маршрутов.Вот маршруты.rb:
match '/main', :to => 'pages#main'
match '/status', :to => 'pages#status'
Буду признателен за любые предложения.
Вот журнал разработки:
Started GET "/status" for 127.0.0.1 at Wed Nov 03 21:28:15 -0700 2010
Processing by PagesController#status as HTML
User Load (0.3ms) SELECT "users".* FROM "users" WHERE ("users"."id" = 3) LIMIT 1
Before redirect
Before redirect
Redirected to
Redirected to
Completed in 32ms
AbstractController::DoubleRenderError (Render and/or redirect were called multiple times in this action. Please note that you may only call render OR redirect, and at most once per action. Also note that neither redirect nor render terminate execution of the action, so if you want to exit an action after redirecting, you need to do something like "redirect_to(...) and return".):
app/controllers/pages_controller.rb:15:in `status'
app/controllers/pages_controller.rb:15:in `status'
Пытаясь решить проблему, яМы добавили две строки отладки к методу состояния в надежде, что он даст некоторую подсказку:
logger.debug "Before redirect"
redirect_to :action => "main" and return
logger.debug "After redirect"
Итак, строки «Перед перенаправлением» попадают до того, как мы перейдем к «Перенаправлено».Затем «Перенаправлено на» появляется дважды без цели.Между прочим, это происходит с или без «и возврата» в строке перенаправления.Я действительно не уверен, что происходит.
Также, что интересно, я добавил строку отладки в основной метод.Это никогда не срабатывает.