[RUBY-ON-RAILS] 어떻게 루비 레일에 이전 페이지로 리디렉션?
RUBY-ON-RAILS어떻게 루비 레일에 이전 페이지로 리디렉션?
나는 페이지가 그 목록 정렬 헤더 및 페이지 매김을 가지고있는 모든 프로젝트.
path:
/projects?order=asc&page=3&sort=code
나는 프로젝트의 편집 하나를 선택
path:
projects/436/edit
내가 해당 페이지에서 저장을 클릭하면 프로젝트 컨트롤러 / update 메소드를 호출합니다. 내가 코드를 업데이트 한 후 나는 특정 프로젝트 편집을 클릭하기 전에이 켜져있는 경로로 리디렉션합니다. 즉, 나는 같은 정렬과 같은 페이지에 싶어요.
I 톱의 LINK_TO (위로) : (위로) 다시는 redirect_to에서 작동 할 수 있으며이 있다고 생각하지만은 더 갈 없습니다.
puts YAML::dump(:back)
yields the following:
:back
나는 일이를 얻을 수있는 방법에 대한 아이디어. 그것은 쉽게 해결 될 문제처럼 보인다,하지만 난 RoR에 새로운 해요.
해결법
-
==============================
1.당신의 편집 작업에서 여러 개의 요청 전반에 사용할 수있는 세션 해시에 요청 URL을 저장합니다 :
당신의 편집 작업에서 여러 개의 요청 전반에 사용할 수있는 세션 해시에 요청 URL을 저장합니다 :
session[:return_to] ||= request.referer
다음 저장 성공 후, 당신의 업데이트 작업에 리디렉션 :
redirect_to session.delete(:return_to)
-
==============================
2.왜 redirect_to 않습니다, 왜 아니요 이동 (백) 당신을 위해 작동하지 않습니다?
왜 redirect_to 않습니다, 왜 아니요 이동 (백) 당신을 위해 작동하지 않습니다?
redirect_to (: 다시는) 나를 위해 마법처럼 작동합니다. 그것은 단지 지름길이다 redirect_to (request.env [ 'HTTP_REFERER'])
http://apidock.com/rails/ActionController/Base/redirect_to (프리 3 레일) 또는 http://apidock.com/rails/ActionController/Redirecting/redirect_to (3 레일)
(위로) 그 redirect_to 있습니다 레일에 사용되지됩니다 5. 사용할 수 있습니다
(fallback_location를 '뭔가') redirect_back 대신 (http://blog.bigbinary.com/2016/02/29/rails-5-improves-redirect_to_back-with-redirect-back.html 참조)
-
==============================
3.나는 한 가지 예외 제이미의 방법처럼, 그것은 때마다 리퍼러 다시 가게에 나를 위해 더 나은 일 :
나는 한 가지 예외 제이미의 방법처럼, 그것은 때마다 리퍼러 다시 가게에 나를 위해 더 나은 일 :
def edit session[:return_to] = request.referer ...
그 이유는 편집 여러 개체 경우, 당신은 항상 당신이 제이미의 방법으로 세션에 저장되어있는 첫 번째 URL로 다시 리디렉션 될 것입니다. 예를 들어, 내가 객체 사과와 오렌지가 있다고 가정 해 보자. I 편집 애플과 세션 [: return_to]가 해당 작업의 리퍼러로 설정됩니다. 나는 동일한 코드를 사용하여 편집 오렌지에 갈 때, 세션 [: return_to]는 이미 정의되어 있기 때문에 설정되지 않습니다. 나는 오렌지를 업데이트 할 때 그래서, 나는 이전의 애플 # 편집 활동의 리퍼러로 보내 얻을 것이다.
-
==============================
4.이것은 우리가 우리의 응용 프로그램에서 작업을 수행하는 방법이다
이것은 우리가 우리의 응용 프로그램에서 작업을 수행하는 방법이다
def store_location session[:return_to] = request.fullpath if request.get? and controller_name != "user_sessions" and controller_name != "sessions" end def redirect_back_or_default(default) redirect_to(session[:return_to] || default) end
return_to : 복수의 시간이 함께 일하는 것이 게시 된 경우에도 모든 형태의, return_to 세션 PARAM 그래서 : 당신은 단지 마지막 GET 요청을 저장하는이 방법.
-
==============================
5.다음과 같이 request.referer은 랙에 의해 설정되며 설정 :
다음과 같이 request.referer은 랙에 의해 설정되며 설정 :
def referer @env['HTTP_REFERER'] || '/' end
그냥 redirect_to의 request.referer을하고 항상 진정한 참조 페이지로 리디렉션됩니다, 또는 root_path ( '/'). 컨트롤러가 redirect_to를 발생하는 특정 페이지로 직접 탐색의 경우에 실패 테스트를 통과 할 때 필수적이다 : 다시
-
==============================
6.레일 5에서, 레일 가이드의 지시에 따라, 당신은 사용할 수 있습니다 :
레일 5에서, 레일 가이드의 지시에 따라, 당신은 사용할 수 있습니다 :
redirect_back(fallback_location: root_path)
'뒤로'위치는 HTTP_REFERER 헤더 브라우저에 의해 설정이 보장되지 않는에서 가져온됩니다. 그게 왜 당신은 'fallback_location'을 제공해야한다.
-
==============================
7.관심이있는 사람들은 여기 (2.1.5 루비, 레일 4.2.4에 대해 작성) MBO의 원래 대답을 확장 내 구현입니다.
관심이있는 사람들은 여기 (2.1.5 루비, 레일 4.2.4에 대해 작성) MBO의 원래 대답을 확장 내 구현입니다.
class ApplicationController < ActionController::Base after_filter :set_return_to_location REDIRECT_CONTROLLER_BLACKLIST = %w( sessions user_sessions ... etc. ) ... def set_return_to_location return unless request.get? return unless request.format.html? return unless %w(show index edit).include?(params[:action]) return if REDIRECT_CONTROLLER_BLACKLIST.include?(controller_name) session[:return_to] = request.fullpath end def redirect_back_or_default(default_path = root_path) redirect_to( session[:return_to].present? && session[:return_to] != request.fullpath ? session[:return_to] : default_path ) end end
from https://stackoverflow.com/questions/2139996/how-to-redirect-to-previous-page-in-ruby-on-rails by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 생산에 레일 응용 프로그램 변경 (0) | 2020.02.07 |
---|---|
[RUBY-ON-RAILS] 4 정품 토큰 레일 (0) | 2020.02.07 |
[RUBY-ON-RAILS] 레일 생산 로그 회전에 루비 (0) | 2020.02.07 |
[RUBY-ON-RAILS] DB 마이그레이션 난간 - 어떻게 테이블을 삭제하려면? (0) | 2020.02.07 |
[RUBY-ON-RAILS] CSRF 보호 + Angular.js는 레일 : protect_from_forgery가 POST에 로그 아웃 나를 수 있습니다 (0) | 2020.02.07 |