我正在编写一个 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。