2012-03-10 12 views
1

레일즈 애플리케이션을 작성 중이며이 컨트롤러에서 ActionController::Base을 상속 함으로 렌더링 할 레이아웃을 지정해야합니다. 일부 다른 컨트롤러에서는 ActionController가 있고 애플리케이션 레이아웃을 자동으로 사용합니다. ::Base을 제거 할 때마다 superclass must be a Class (Module given) 페이지에 액세스 할 때 다음 메시지가 표시됩니다.ActionController에서 ':: Base'를 제거 할 때 오류가 발생했습니다.

이 컨트롤러에서 ActionController::Base을 상속하는 이유는 무엇입니까?

답변

0

컨트롤러는 ApplicationController에서 상속해야합니다. 그러면 응용 프로그램 레이아웃을 자동으로 렌더링 할 수 있습니다. ApplicationController는 ActionController :: Base를 확장합니다.

2

직접 질문 ActionController는 컨트롤러 클래스없는 대답하기 위해, 그 힘 전체 컨트롤러 스택을 네임 스페이스 지정 모듈입니다. 일반적인 Rails 개발 중에는 ActionController 모듈과 상호 작용하지 않습니다. ActionController::Base은 실제로 컨트롤러가 상속하는 클래스입니다. 따라서 ActionController에서 상속받을 수 없습니다.

하지만 여기에는 두 개의 컨트롤러가 있다고 생각합니다. ActionController::BaseApplicationController. 제 생각에 이 ::Base이 아닌 ActionController 인 것으로 잘못 생각하는 것 같습니다.

ActionController::Base는 레일의 모든 기능에서 오는 메인 컨트롤러 클래스입니다. ApplicationController는 당신이 방법을 추가하고 다른 레일 컨트롤러의 모든 상속 할 수 있습니다 일반화 된 컨트롤러입니다.

당신은 당신의 컨트롤러 중 하나에서 다른 레이아웃을 사용하여 다음을 수행 할 수 :

class AuthenticationController < ApplicationController 
    layout 'authentication' 
end 

당신은 직접 AuthenticationController를 사용하거나 새로운 컨트롤러가 AuthenticationController에서 상속 할 수 있습니다.

관련 문제