2011-02-23 2 views
2

Rails에서 "before_filter : login_required"가 작동하면 작업에 "login_required"를 추가해도 작동하지 않는 이유는 무엇입니까?

before_filter :login_required 

가 컨트롤러의 모든 동작에 대해 작동하지만 그 라인에 주석을 달고 그냥 이렇게하면됩니다 :

def index 
    login_required 
    [...] 
end 

그러면 서버는 렌더링 만 할 수 있다고 불평합니다 또는 작업 당 한 번 리디렉션하십시오. 전에 필터를 사용하는 것이 위와 같은 방법을 추가하는 것과 같다고 생각했습니다. 설명 해주십시오.

답변

2

before_filter 및 around_filter는 동작이 실행되는 제어기 전에 요청을 중단 할 수있다. 예를 들어 인증되지 않은 사용자에게 액세스를 거부하거나 을 HTTP에서 HTTPS로 리디렉션하는 것이 유용합니다. 간단히 render 을 호출하거나 리디렉션하십시오. 필터 체인이 인 경우 후 필터는 이 실행되지 않습니다.

이것은 (필터 체인 중지)에서 온 것입니다. 따라서 필터에서 렌더링 또는 리디렉션이 발생하면 필터 체인이 중지되고 나머지 코드는 실행되지 않습니다. 따라서이 경우에는 오류가 발생하지 않습니다. 그러나 메서드를 직접 호출하면 메서드 호출 후의 코드도 실행되므로 '작업 당 렌더링 또는 리디렉션'오류가 발생합니다.

+0

액션에서 대신 호출하기로 결정했다면 어떻게 수행 될까요? –

+0

@ 動靜 能量 만약 login_required에서 리다이렉트가 일어나면'login_required'에서 플래그를 넘겨주고 플래그가 설정되어 있다면'index' 메소드에서'return'을 호출해야합니다 – rubyprince

관련 문제