是否可以在许多不同的控制器中定义ActionController :: Base?

时间:2014-04-22 04:05:02

标签: ruby-on-rails ruby ruby-on-rails-4 actioncontroller applicationcontroller

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

class OrdersController < ActionController::Base
  # stuff
end

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

的内容。
class OrdersController < ApplicationController
  # stuff
end

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

2 个答案:

答案 0 :(得分:2)

技术上可行,但不建议。

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

从页面引用:

  

默认情况下,只有Rails应用程序中的ApplicationController   继承自ActionController :: Base。所有其他控制器依次   从ApplicationController继承。这给你一个课程   配置请求伪造保护和过滤等事项   敏感的请求参数。

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

答案 1 :(得分:1)

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

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

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

万一您尚未查看控制器上的相关EdgeGuide:http://edgeguides.rubyonrails.org/action_controller_overview.html