子类控制器,以及何时调用超级

时间:2012-03-21 14:59:46

标签: ruby-on-rails ruby ruby-on-rails-3 actioncontroller

我有很多控制器会有一些类似的行为,例如用户应该登录,需要设置一些范围,需要设置current_account / current_user并缓存权限。

我想到使用标准控制器并对其进行子类化。

class MyStandardController < ApplicationController
 before_filter :xyz
end 

class SomeController < MyStandardController
end

我想知道的是,我是否需要/何时致电super

1 个答案:

答案 0 :(得分:5)

您不需要在从另一个控制器继承的控制器内调用super;事实上,这样做可能有点奇怪。 Super从超类中执行同名的方法,你可能在MyStandardController上没有任何方法,你将在其子级中重新定义。

正如您自己所说,执行此操作的主要原因是,可以跨控制器轻松地命名过滤器和方法。我们在我们的应用程序中执行类似的操作,其中具有非常相似行为的站点的一个区域将从控制器(如ShoppingController)继承,该控制器具有一部分仅可在其所有子项上使用的私有便捷方法。

然而,实际上,拥有实现所需功能的模块可能会更好,并将它们包含在您想要的控制器中。最终你可能想要一个控制器在另一个控制器上的东西,并且使用模块比使用复杂的继承层次结构更容易。