我正在编写一个 rails 应用程序,在这个控制器中,由于继承自ActionController::Base. 在我的其他一些控制器中,我只有 ActionController,它会自动使用应用程序布局。每当我删除::Base时,访问页面时都会收到以下消息superclass must be a Class (Module given)。
为什么ActionController::Base在这个控制器中继承很重要,而在其他控制器中没有?
我正在编写一个 rails 应用程序,在这个控制器中,由于继承自ActionController::Base. 在我的其他一些控制器中,我只有 ActionController,它会自动使用应用程序布局。每当我删除::Base时,访问页面时都会收到以下消息superclass must be a Class (Module given)。
为什么ActionController::Base在这个控制器中继承很重要,而在其他控制器中没有?
直接回答您的问题ActionController不是控制器类,而是为整个控制器堆栈提供动力的命名空间模块。ActionController在典型的 Rails 开发过程中,您不会与模块交互。ActionController::Base实际上是控制器继承的类。这就是为什么你不能继承自ActionController.
但我认为这里有两个控制器在起作用。ActionController::Base和ApplicationController。我想你可能误ApplicationController认为ActionController没有::Base.
ActionController::Base是所有 Rails 功能的主要控制器类。ApplicationController是一个通用控制器,您可以向其中添加方法并让所有其他 Rails 控制器继承。
您可以执行以下操作以在其中一个控制器中使用不同的布局:
class AuthenticationController < ApplicationController
layout 'authentication'
end
您可以AuthenticationController直接使用 ,也可以让新的控制器继承自AuthenticationController.
你的控制器应该继承自ApplicationController. 这将允许他们自动呈现应用程序布局。ApplicationController 扩展了 ActionController::Base。