Загрузите Rails3 для загрузки другого представления - PullRequest
1 голос
/ 04 ноября 2010

Я работаю над приложением 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"

Итак, строки «Перед перенаправлением» попадают до того, как мы перейдем к «Перенаправлено».Затем «Перенаправлено на» появляется дважды без цели.Между прочим, это происходит с или без «и возврата» в строке перенаправления.Я действительно не уверен, что происходит.

Также, что интересно, я добавил строку отладки в основной метод.Это никогда не срабатывает.

1 Ответ

0 голосов
/ 04 ноября 2010

Rav, вы можете вставить журнал разработки для этого запроса?В частности, приводит ли первый запрос к / status к перенаправлению на / main или с ошибкой, указанной выше?

В частности, ищите в журнале / development.log самый последний блок или блоки запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...