1

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

为什么ActionController::Base在这个控制器中继承很重要,而在其他控制器中没有?

4

2 回答 2

2

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

但我认为这里有两个控制器在起作用。ActionController::BaseApplicationController。我想你可能误ApplicationController认为ActionController没有::Base.

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

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

class AuthenticationController < ApplicationController
  layout 'authentication'
end

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

于 2012-03-11T16:58:11.213 回答
0

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

于 2012-03-10T21:21:27.027 回答