У меня есть форма входа на панели навигации приложения, и мне было интересно, есть ли простой способ перенаправить sign_in на любую страницу, на которой вы сейчас находитесь, когда вы sign_in. Спасибо!
Перенаправить на рельсы текущей страницы
Ответы (5)
Вы можете redirect_to(:back)
, если указан реферер. Однако я бы рекомендовал вам взглянуть на этот ответ как на решение. представленные там будут устойчивы к таким вещам, как неудачные попытки входа в систему и перенаправления OAuth.
В Rails 5 вы должны использовать redirect_back
и добавить резервный путь:
redirect_back(fallback_location: root_path)
Если вы написали код для создания сеанса для вашего пользователя, просто добавьте эту строку после этого в свой sessions_controller:
redirect_to root_url, :notice => "Logged in!"
здесь вместо root_url вы можете ввести любой путь, на который хотите перенаправить пользователя. но убедитесь, что он у вас есть в routes.rb
, и если вы рассматриваете неудачный вход в систему, вы можете использовать метод render
, чтобы перезагрузить представление входа в систему.
redirect_to
изменился в зависимости от того, где сейчас на сайте находится незарегистрированный пользователь. Панель навигации видна на каждой странице, поэтому, например, если пользователь находится на домашней странице, когда он входит в систему, я хочу, чтобы sessionsons_controller запускал reidrect_to home_path
, или если они находятся на странице пользователя, когда они входят в систему, я хочу, чтобы он запускался redirect_to user_page
- person user2136807; 11.07.2013
.json
файл на своем контроллере. Поэтому вам нужно написать функцию javascript для перезагрузки страницы и визуализации этого файла на вашем контроллере. Что-то вроде location.reload()
- person Erfan Sh.z.; 12.07.2013
Это решение от разработчиков Devise должно помочь ...
В ApplicationController
напишите следующее:
after_filter :store_location
def store_location
# store last url - this is needed for post-login redirect to whatever the user last visited.
return unless request.get?
if (request.path != "/users/sign_in" &&
request.path != "/users/sign_up" &&
request.path != "/users/password/new" &&
request.path != "/users/password/edit" &&
request.path != "/users/confirmation" &&
request.path != "/users/sign_out" &&
!request.xhr?) # don't store ajax calls
session[:previous_url] = request.fullpath
end
end
def after_sign_in_path_for(resource)
session[:previous_url] || root_path
end
redirect_back
- это то, что у меня сработало:
redirect_back fallback_location: root_path