2012-11-22 3 views
1

나는 비표준 무언가를 할 필요가있을 때마다 각 메소드를 오버라이드한다는 생각이 들었다. 루비의 클래스 메소드를 오버라이드하여 예상대로 작동하지 않는다.

class MyBaseController < ApplicationController 

    load_and_authorize_resource 

    # Common crud actions 

end 

지금 내 아이 컨트롤러 중 하나에 내가 대신 내가 액세스가 예외를 거부 얻을, (export_csv)
class ReportsController < MyBaseController 

    load_and_authorize_resource :except => :export_csv 

    def export_csv 
    # custom auth and other stuff 
    end 

end 

은 이제 더 이상 내 export_csv 조치를 칠 수없는 사용자 지정 작업이 있습니다. 내 기본 컨트롤러에서 상속하지 않으면 모두 좋다.

class MyBaseController < ApplicationController 

    load_and_authorize_resource :except => auth_exceptions 

    def self.auth_exceptions 
    [] 
    end 

    # Common crud actions 

end 

을 그리고 필요에 따라 내 자식 클래스에서 self.auth_exceptions를 오버라이드 (override) :

나는 다음과 같이 내가 해결할 수 있습니다 생각했다.

사람이 선택적으로 부하를 무시하고 내 아이 컨트롤러에서 자원 권한을 부여하는 어떤 제안이 있습니까 :

그러나이 "클래스를 MyBaseController에 대한 정의되지 않은 지역 변수 또는 메소드`auth_exceptions '"오류를 트리거?

도움 주셔서 감사합니다. 파생 클래스

+0

나는 컨트롤러가 어떤 리소스도 표현할 수 없으므로 모든 것을 패치해야한다는 생각은 전혀 잘못된 생각이다. – apneadiving

+0

이러한 경우에는 ApplicationController에서 바로 상속받을 수 있습니까? – Chris

+0

네, 기대하는 바에 달려 있습니다. DRY 일을하지 않으면 값 비싼 미래의 변화가 발생합니다. – apneadiving

답변

관련 문제