0

我想在ApplicationController's 过滤器中声明来自不同控制器的一些方法,如下所示:

ApplicationContoller

before_filter :authorize, :except => [:index, :show, :different_controller_method]

其中在:different_controller_method中定义UserController。我们可以这样做吗?

4

4 回答 4

1

但是你想保持这种状态吗?想象一下其他人正在阅读您的 UserController 类定义。她通常会通过查看您定义了 UserController 类的同一文件来检查 UserController#differnt_controller_method 上是否有任何过滤器。在那里找不到任何过滤器,她会假设 different_controller_method 没有任何过滤器。

最好将相关的东西放在一起,否则维护应用程序会变得很困难,因为添加功能或修复错误需要更改许多文件。我强烈建议您观看Sandi Metz 在 GoRuCo 2009 上的演讲

于 2011-11-17T06:52:33.573 回答
1

在清理您问题的语法时,我注意到您没有使用符号来描述您的“不同”方法。

before_filter :authorize, :except => [:index, :show, :different_controller_method]

并不是

before_filter :authorize, :except => [:index, :show, different_controller_method]

注意冒号。

于 2011-11-17T07:56:33.907 回答
0

我们可以这样做吗?

是的你可以。

于 2011-11-17T06:20:29.333 回答
0

通常这应该工作。正如@jdl 所说,确保您使用的是符号。

大多数时候,我们使用不同的方法。在你的ApplicationController你写

before_filter :authorize

因此,根据定义,所有访问都是授权的。然后你UsersController可以添加一个例外:

skip_before_filter :authorize, :only => [:index, :show, :different_controller_method]

希望这可以帮助。

于 2011-11-22T15:17:00.510 回答