做before_filter:除了跨子类控制器的工作?

时间:2011-11-17 06:08:48

标签: ruby-on-rails actioncontroller

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

ApplicationContoller

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

其中:different_controller_methodUserController中定义。我们可以这样做吗?

4 个答案:

答案 0 :(得分:1)

但你想保持这种方式吗?想象一下,其他人正在阅读您的UserController类定义。她会检查UserController#differnt_controller_method上是否有任何过滤器,通常是查看你定义的UserController类的同一个文件。没有找到任何过滤器,她会认为differnt_controller_method没有任何过滤器。

最好将相关内容保持在一起,否则保持应用程序变得困难,因为添加功能或修复错误需要更改许多文件。我强烈建议您在GoRuCo 2009上观看Sandi Metz的this talk

答案 1 :(得分:1)

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

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

而不是

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

注意冒号。

答案 2 :(得分:0)

  

我们可以这样做吗?

是的,你可以。

答案 3 :(得分:0)

通常这应该有效。确保你正在使用符号,正如@jdl所说的那样。

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

before_filter :authorize

因此,根据定义,所有访问都是经过授权的。在UsersController中,您可以添加例外:

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

希望这有帮助。