2

如果你有一个OrdersController,你能像这样定义这个类吗?

class OrdersController < ActionController::Base
  # stuff
end

当我生成一个 Rails 脚手架时,它似乎被定义的唯一位置是在 中ApplicationController(application_controller.rb),我创建的其他控制器有一些类似的东西

class OrdersController < ApplicationController
  # stuff
end

使用第一个是否正确?在这种情况下?我似乎找不到一个好的答案。

4

2 回答 2

3

这在技术上是可行的,但不建议这样做。

阅读:http ://api.rubyonrails.org/classes/ActionController/Base.html

从页面引用:

默认情况下,只有 Rails 应用程序中的 ApplicationController 继承自 ActionController::Base。所有其他控制器依次继承自 ApplicationController。这为您提供了一个类来配置诸如请求伪造保护和敏感请求参数过滤之类的东西。

您也可以直接从 ActionController::Base 继承。这仅仅是类继承的一个例子。这里的 ActionController::Base 更像一个抽象类。

于 2014-04-22T04:19:14.233 回答
1

是的,您当然可以从 ActionController::Base 派生您的控制器类,它是您观察到的 ApplicationController 的父类。

鼓励从 ApplicationController 派生,因为它为您的应用程序提供了命名空间。您所有的应用程序控制器都派生自它,并且您希望在所有应用程序控制器中共享的所有常见控制器方法都在那里。

因此,如果您想创建一个不应该继承 ApplicationController 方法的控制器,您可以直接从该控制器的 ActionController::Base 继承。

以防万一您还没有查看控制器上的相关 EdgeGuide:http ://edgeguides.rubyonrails.org/action_controller_overview.html

于 2014-04-22T04:18:52.563 回答