2010-03-05 3 views
57

명확성을 위해 이름과 개체가 단순화되었습니다. 기본 개념은 동일하게 유지됩니다.레일에서 before_filter 건너 뛰기

나는 컨트롤러가 세 개 있습니다 : dog, cathorse입니다. 이 컨트롤러는 모두 컨트롤러 animal에서 상속합니다. 제어기 animal에서 는 I가 이전과 같은 사용자를 인증 필터 가지고 dogshow 액션

before_filter :authenticate 

def authenticate 
    authenticate_or_request_with_http_basic do |name, password| 
    name == "foo" && password == "bar" 
    end 
end 

를, I는 (인증 략) 모든 사용자에게 공개 접근 할 필요가있다. 내가 dog에 대해 개별적으로 인증을 작성한다면

, 나는 이런 식으로 뭔가를 할 수 :

before_filter :authenticate, :except => :show 

그러나 animal에서 dog 상속, 나는 컨트롤러 별 작업에 액세스 할 수 없습니다 때문이다. animal 컨트롤러에 :except => :show을 추가하면 dog 동작의 인증을 건너 뛰지 않을뿐만 아니라 cathorse의 인증도 건너 뜁니다. 이 동작은 바람직하지 않습니다.

animal에서 계승하면서 show 동작이 dog 인 경우에만 인증을 건너 뛸 수 있습니까? 그것은 당신의 예에서 Rails API

에 설명 된 것

dog 그냥 것 skip_before_filter

답변

107
class Dog < Animal 
    skip_before_filter :authenticate, :only => :show 
end 

필터에 대한 자세한 정보를 원하시면 ActionController::Filters::ClassMethods를 참조 포함하는 데 사용할 수있는 및 계승.

+2

'skip_before_filter'는 더 이상 사용되지 않는 것 같습니다. [http://apidock.com/rails/ActionController/Filters/ClassMethods/skip_before_filter#1083-deprecated-moved](http://apidock.com/rails/ActionController/) Filters/ClassMethods/skip_before_filter # 1083-deprecated-moved) 그들은'skip_before_filter','skip_after_filter' 및'skip_around_filter'를 모두 호출하는'skip_filter'를 사용하도록 권장합니다. – Bachet

+4

아니요 .. 그들은 단지 다른 클래스로 메서드를 이동합니다. http://apidock.com/rails/v3.2.3/AbstractController/Callbacks/ClassMethods/skip_before_filter – Orlando

+0

예 이동되었습니다. –

3

이 들어 당신이

skip_before_filter :authenticate 
12

두 답변은 반갑습니다. 레일 4를 사용

class Dog < Animal 
    skip_before_filter :authenticate, :only => :show 
end 
2

그냥 작은 업데이트가, 지금 skip_before_action :authenticate, :only => :show이며 다음과 같이 모든 개 조치를 개방하고 방지하기 위해, 당신은 단지 '쇼'액션에 적용 할 skip_before_filter을 평가해야 before_filters가 이제 before_action을 사용해야합니다.

+0

이것은 주석이어야합니다. – dan