2012-02-20 2 views
27

레일즈에서 컨트롤러 "abc"를 "제외"할 때 before_filter 구문은 무엇입니까?before_filter 구문을 "except"컨트롤러 "abc"로 지정

예는 application_controller에서 내가 말하고 싶은 경우 :

before_filter :login_required :except => ["-name of controller-"] 

배경 - 그냥 실제로 사용자가 인증 받고 처리하는 컨트롤러를 제외한 전체 응용 프로그램에서 기본 인증을 원했다 ....

답변

55

당신은 before_filter이 실행되지 않아야 컨트롤러에 다음 줄 넣을 수 있습니다 :

skip_before_filter :login_required 

을 당신은 할 수 있습니다 before_filter:only:except 옵션이 무시됩니다 방법을에서 지정할 :

skip_before_filter :login_required, :only => [:login] 

here.


편집은 : 레일 4, before_filterbefore_action로 별명되며, skip_before_filterskip_before_action

14

before_filter 구문을 사용하여 별명이

before_filter :login_required, :except => ["-name of the action-"] 

Rails API Doc에 보라입니다.

3

컨트롤러 이름을 사용하는 대신 컨트롤러가 부모로부터 필터를 상속한다는 점을 활용하는 것이 좋습니다.

# app/controllers/application_controller.rb 
class ApplicationController 
    # no filters here 
end 

# app/controllers/authenticated_controller.rb 
class AuthenticatedController < ApplicationController 
    before_filter :login_required 
end 

# app/controllers/some_other_controller.rb 
class SomeOtherController < AuthenticatedController 
    # inherits the before_filter from AuthenticatedController 
    # use this for most of your other controllers 
end 

# app/controllers/unauthenticated_controller.rb 
class UnauthenticatedController < ApplicationController 
    # no filters, since this inherits directly from ApplicationController 
    # use this for the controller that you don't want to check login on 
end 

이것은 컨트롤러가 그들이 오히려 이름의 (아마도 취성) 목록을하는 것보다, 로그인을 확인하기로하고 있는지 알고 의미 : 그래서 내가 권하고 싶습니다하면이 같은 것입니다.

관련 문제