Я пытаюсь выяснить, как вернуть пользователя на исходную страницу после того, как он зарегистрируется или войдет на сайт через Devise.
Например: пользователь просматривает листинг А. Пользователь нажимает «Зарегистрироваться», успешно регистрируется (без подтверждения). Но вместо того, чтобы перенаправляться обратно в корень, они возвращаются обратно в листинг А.
Раньше я делал это с моей доморощенной аутентификацией, сохраняя исходный URL-адрес в сеансе, затем при успешном входе в систему перенаправляйте на сохраненный URL-адрес или переходите на страницу по умолчанию, если она пуста.
Могу ли я сделать то же самое с Devise, или есть ли предпочтительный способ достижения того же?
ОТВЕТ
После того, как я поразил мой мозг в течение нескольких часов, а затем опубликовал ТАК вопрос, он почти сразу же ударил меня после отправки вопроса. Вот как я это сделал:
В моем контроллере приложений я нюхаю, чтобы увидеть, есть ли в URL параметры return_to. Если есть, я устанавливаю это в сессии.
Затем я перезаписываю after_sign_in_path_for в контроллере приложения, чтобы перенаправить на сохраненное значение сеанса или путь root_path.
Вот (соответствующие части) мой application_controller.rb:
class ApplicationController < ActionController::Base
before_filter :check_for_manual_return
def check_for_manual_return
session[:return_to] = params[:return_to] if !params[:return_to].nil?
end
def after_sign_in_path_for(resource)
return session[:return_to] || root_path
end
end