2012-03-10 51 views
1

我正在编写一个rails应用程序,并且在这一个控制器中,我需要指定由于从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。我想你可能错误ApplicationControllerActionController没有::Base

ActionController::Base是主控制器类,其中所有的Rails功能都来自于此。 ApplicationController是一个通用控制器,您可以将方法添加到并让所有其他Rails控制器继承。

你可以做以下的在控制器中的一个使用不同的布局:

class AuthenticationController < ApplicationController 
    layout 'authentication' 
end 

您可以直接使用AuthenticationController,或有新的控制器从AuthenticationController继承。