Что делает rails после redirect_to или рендеринга в контроллере? - PullRequest
2 голосов
/ 20 декабря 2011

Например, у меня есть что-то подобное в моем контроллере

def save
  ...
  render 'error' if user.nil?
  @cast = user.cast
  render 'cast'
end

Так что у меня nil: здесь нет ошибки метода (в user.cast).Но если я использую redirect_to вместо render, все будет отлично работать.

Так что похоже, что rails не останавливает свой исполнительный стек после рендеринга, а останавливается после redirect_to.Не так ли?

Ответы [ 3 ]

3 голосов
/ 20 декабря 2011

Ваше предположение верно.redirect_to отправляет сообщение перенаправления HTTP 302 в браузер пользователя, сообщая ему перейти на другой URL, тем самым останавливая ваше текущее выполнение.

Я бы рекомендовал проверить это сообщение: http://blog.markusproject.org/?p=3313

Он дает отличную сводку о том, как использовать каждый из них:

Визуализирует конкретное представление с использованием переменных экземпляра, доступных в действии.Например, если для нового действия использовался рендер, когда пользователь переходит в / new, вызывается новое действие в контроллере, создаются переменные экземпляра, а затем передаются в новое представление.Rails создает html для этого представления и возвращает его обратно в браузер пользователя.Это то, что вы считаете нормальной загрузкой страницы.

redirect_to отправит перенаправление в браузер пользователя, сообщив ему о необходимости повторно запросить новый URL.Затем браузер отправит новый запрос на этот URL и выполнит действие для этого URL, не обращая внимания на тот факт, что он был перенаправлен.Ни одна из переменных, созданных в действии, вызвавшем перенаправление, не будет доступна для перенаправленного представления.Это то, что происходит, когда вы нажимаете «Создать» в форме, и объект создается, и вы перенаправляетесь в представление редактирования для этого объекта.

1 голос
/ 20 декабря 2011

Для вашего примера для работы вы можете изменить строку на

render('error') and return if user.nil?
0 голосов
/ 20 декабря 2011

Вы можете использовать регистратор после render, например. redirect_to останавливает выполнение метода.

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