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