我想在ApplicationController
的过滤器中声明来自不同控制器的一些方法,如下所示:
在ApplicationContoller
before_filter :authorize, :except => [:index, :show, :different_controller_method]
其中:different_controller_method
在UserController
中定义。我们可以这样做吗?
答案 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]
希望这有帮助。