복붙노트

[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. ==============================

    1.당신의 편집 작업에서 여러 개의 요청 전반에 사용할 수있는 세션 해시에 요청 URL을 저장합니다 :

    당신의 편집 작업에서 여러 개의 요청 전반에 사용할 수있는 세션 해시에 요청 URL을 저장합니다 :

    session[:return_to] ||= request.referer
    

    다음 저장 성공 후, 당신의 업데이트 작업에 리디렉션 :

    redirect_to session.delete(:return_to)
    
  2. ==============================

    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. ==============================

    3.나는 한 가지 예외 제이미의 방법처럼, 그것은 때마다 리퍼러 다시 가게에 나를 위해 더 나은 일 :

    나는 한 가지 예외 제이미의 방법처럼, 그것은 때마다 리퍼러 다시 가게에 나를 위해 더 나은 일 :

    def edit
        session[:return_to] = request.referer
    ...
    

    그 이유는 편집 여러 개체 경우, 당신은 항상 당신이 제이미의 방법으로 세션에 저장되어있는 첫 번째 URL로 다시 리디렉션 될 것입니다. 예를 들어, 내가 객체 사과와 오렌지가 있다고 가정 해 보자. I 편집 애플과 세션 [: return_to]가 해당 작업의 리퍼러로 설정됩니다. 나는 동일한 코드를 사용하여 편집 오렌지에 갈 때, 세션 [: return_to]는 이미 정의되어 있기 때문에 설정되지 않습니다. 나는 오렌지를 업데이트 할 때 그래서, 나는 이전의 애플 # 편집 활동의 리퍼러로 보내 얻을 것이다.

  4. ==============================

    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. ==============================

    5.다음과 같이 request.referer은 랙에 의해 설정되며 설정 :

    다음과 같이 request.referer은 랙에 의해 설정되며 설정 :

    def referer
      @env['HTTP_REFERER'] || '/'
    end
    

    그냥 redirect_to의 request.referer을하고 항상 진정한 참조 페이지로 리디렉션됩니다, 또는 root_path ( '/'). 컨트롤러가 redirect_to를 발생하는 특정 페이지로 직접 탐색의 경우에 실패 테스트를 통과 할 때 필수적이다 : 다시

  6. ==============================

    6.레일 5에서, 레일 가이드의 지시에 따라, 당신은 사용할 수 있습니다 :

    레일 5에서, 레일 가이드의 지시에 따라, 당신은 사용할 수 있습니다 :

    redirect_back(fallback_location: root_path)
    

    '뒤로'위치는 HTTP_REFERER 헤더 브라우저에 의해 설정이 보장되지 않는에서 가져온됩니다. 그게 왜 당신은 'fallback_location'을 제공해야한다.

  7. ==============================

    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
    
  8. from https://stackoverflow.com/questions/2139996/how-to-redirect-to-previous-page-in-ruby-on-rails by cc-by-sa and MIT license