У меня есть страница, на которой перечислены все проекты с сортируемыми заголовками и нумерацией страниц.
path:
/projects?order=asc&page=3&sort=code
Я выбираю для редактирования один из проектов
path:
projects/436/edit
Когда я нажимаю сохранить на этой странице, он вызывает метод контроллера / обновления проекта. После того, как я обновлю код, я хочу перенаправить на путь, по которому я был, прежде чем я щелкнул редактировать конкретный проект. Другими словами, я хочу быть на той же странице с той же сортировкой.
Я видел link_to (: back) и думал, что: back может работать в redirect_to (: back), но это не пойдет.
puts YAML::dump(:back)
yields the following:
:back
Любые идеи о том, как я мог бы заставить это работать. Это похоже на проблему, которую легко решить, но я новичок в RoR.
источник
redirect_to session.delete(:return_to)
в действии обновления. Это очищает значение от сеанса, так как оно больше не нужно.redirect_to request.referer
?request.referer.referer
, если это возможно. @ Хайме Беллмайер Почему||=
?Почему у вас
redirect_to(:back)
не работает, почему нет?redirect_to(:back)
работает как шарм для меня. Это просто короткий путь дляredirect_to(request.env['HTTP_REFERER'])
http://apidock.com/rails/ActionController/Base/redirect_to (до Rails 3) или http://apidock.com/rails/ActionController/Redirecting/redirect_to (Rails 3)
Обратите внимание, что
redirect_to(:back)
это устарело в Rails 5. Вы можете использоватьredirect_back(fallback_location: 'something')
вместо этого (см. http://blog.bigbinary.com/2016/02/29/rails-5-improves-redirect_to_back-with-redirect-back.html )источник
redirect_to :back
не работает хорошо для меня тоже, говорят , вы посещаете/posts/new
, это устанавливается в качестве реферера для следующего запроса, поэтому после того , как форма успешно отправлена она показывает форму снова, то есть/posts/new
. Однако он хорошо работает для других целей.redirect_to projects_path
.HTTP_REFERER
не установлено, вы можете получитьActionController::RedirectBackError
, вам придется спасаться от этого исключения в этом случае. Насколько я понимаю, использованиеredirect_back
не требует обработки исключений, так как вы вынуждены предоставлятьfallback_location
. Может быть, «не работает хорошо» - это неправильный способ выразить это.Мне нравится метод Хайме с одним исключением, для меня лучше работать каждый раз, когда я заново сохраняю реферер:
Причина в том, что если вы редактируете несколько объектов, вы всегда будете перенаправлены обратно на первый URL, который вы сохранили в сеансе с помощью метода Jaime. Например, допустим, у меня есть объекты Apple и Orange. Я редактирую Apple и получаю
session[:return_to]
разрешение от этого действия. Когда я иду, чтобы редактировать апельсины, используя тот же код,session[:return_to]
не будет установлен, потому что он уже определен. Поэтому, когда я обновлю Orange, меня отправят рефереру предыдущего действия Apple # edit.источник
Вот как мы делаем это в нашем приложении
Таким образом, вы сохраняете только последний GET-запрос в параметре
:return_to
сеанса, поэтому все формы, даже если многократно POSTed будет работать:return_to
.источник
request.request_uri
больше недоступен, поэтому я предлагаю использоватьrequest.fullpath
вместо этогоand
иor
вif
высказываниях. Используйте&&
и||
вместо. Подробности здесь .В рельсах 5, согласно инструкциям в Rails Guides, вы можете использовать:
Местоположение 'back' берется из заголовка HTTP_REFERER, который не гарантируется браузером. Вот почему вы должны предоставить 'fallback_location'.
источник
notice
объект сredirect_back
оператором, чтобы сказать пользователю, что что-то пошло не так с флэш-сообщением?redirect_back(fallback_location: root_path, notice: "Something went wrong!")
. Надеюсь, это может как-то помочь.request.referer
устанавливается Rack и устанавливается следующим образом:Просто сделайте a,
redirect_to request.referer
и он всегда будет перенаправлен на истинную ссылающуюся страницу, или root_path ('/'). Это важно при прохождении тестов, которые терпят неудачу в случаях прямой навигации к определенной странице, на которой контроллер выдает redirect_to: backисточник
referer
было определено по состоянию на 28 марта 2011 года , и это то, как он определен на сегодняшний день . То есть|| '/'
не является частью определения.Для тех, кто заинтересован, вот моя реализация, расширяющая оригинальный ответ MBO (написанный против rails 4.2.4, ruby 2.1.5).
источник