Перенаправить на рельсы текущей страницы

У меня есть форма входа на панели навигации приложения, и мне было интересно, есть ли простой способ перенаправить sign_in на любую страницу, на которой вы сейчас находитесь, когда вы sign_in. Спасибо!


person user2136807    schedule 11.07.2013    source источник


Ответы (5)


Вы можете redirect_to(:back), если указан реферер. Однако я бы рекомендовал вам взглянуть на этот ответ как на решение. представленные там будут устойчивы к таким вещам, как неудачные попытки входа в систему и перенаправления OAuth.

person Chris Heald    schedule 11.07.2013

В Rails 5 вы должны использовать redirect_back и добавить резервный путь:

redirect_back(fallback_location: root_path)
person ann    schedule 19.09.2017

Если вы написали код для создания сеанса для вашего пользователя, просто добавьте эту строку после этого в свой sessions_controller:

redirect_to root_url, :notice => "Logged in!"

здесь вместо root_url вы можете ввести любой путь, на который хотите перенаправить пользователя. но убедитесь, что он у вас есть в routes.rb
, и если вы рассматриваете неудачный вход в систему, вы можете использовать метод render, чтобы перезагрузить представление входа в систему.

person Erfan Sh.z.    schedule 11.07.2013
comment
Проблема в том, что я хочу, чтобы путь redirect_to изменился в зависимости от того, где сейчас на сайте находится незарегистрированный пользователь. Панель навигации видна на каждой странице, поэтому, например, если пользователь находится на домашней странице, когда он входит в систему, я хочу, чтобы sessionsons_controller запускал reidrect_to home_path, или если они находятся на странице пользователя, когда они входят в систему, я хочу, чтобы он запускался redirect_to user_page - person user2136807; 11.07.2013
comment
и есть ли у вас форма sign_in в другом представлении или в упомянутой вами панели? - person Erfan Sh.z.; 11.07.2013
comment
Он расположен в панели навигации, поэтому он находится в макете приложений. - person user2136807; 12.07.2013
comment
Я не пробовал, но, как вы знаете, вы можете визуализировать .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
person brntsllvn    schedule 08.08.2015

redirect_back - это то, что у меня сработало:

redirect_back fallback_location: root_path
person stevec    schedule 18.06.2021