3

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

我正在考虑使用标准控制器并将其子类化。

class MyStandardController < ApplicationController
 before_filter :xyz
end 

class SomeController < MyStandardController
end

我想知道的是我需要/什么时候打电话super

4

1 回答 1

5

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

正如您自己所说,这样做的主要原因是让过滤器和方法在控制器之间轻松命名空间。我们在我们的应用程序中做了类似的事情,其中​​一个具有非常相似行为的站点区域将继承自一个控制器(如 ShoppingController),该控制器具有一部分私有便利方法,这些方法仅可用于其所有子级。

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

于 2012-03-21T15:14:13.427 回答