从ActionController中删除':: Base'时出错

时间:2012-03-10 21:19:09

标签: ruby-on-rails ruby ruby-on-rails-3 base actioncontroller

我正在编写一个rails应用程序,在这个控制器中,我需要指定要从ActionController::Base继承而呈现的布局。在我的一些其他控制器中,我只有ActionController,它会自动使用应用程序布局。每当我删除::Base时,我都会在访问页面superclass must be a Class (Module given)时收到以下消息。

为什么在此控制器中继承ActionController::Base很重要,而在其他控制器中却不重要?

2 个答案:

答案 0 :(得分:2)

直接回答你的问题ActionController不是控制器类,它是一个命名空间模块,为整个控制器堆栈提供动力。在典型的Rails开发过程中,您不会与ActionController模块进行交互。 ActionController::Base实际上是控制器继承的类。这就是您无法继承ActionController

的原因

但我认为这里有两个控制器。 ActionController::BaseApplicationController。我认为如果没有ApplicationController ActionController,您可能误以为::Base

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

您可以执行以下操作,在其中一个控制器中使用不同的布局:

class AuthenticationController < ApplicationController
  layout 'authentication'
end

您可以直接使用AuthenticationController,也可以让新控制器继承AuthenticationController

答案 1 :(得分:0)

您的控制器应继承自ApplicationController。这将允许他们自动呈现应用程序布局。 ApplicationController扩展了ActionController :: Base。