我想在ApplicationController
's 过滤器中声明来自不同控制器的一些方法,如下所示:
在ApplicationContoller
before_filter :authorize, :except => [:index, :show, :different_controller_method]
其中在:different_controller_method
中定义UserController
。我们可以这样做吗?
我想在ApplicationController
's 过滤器中声明来自不同控制器的一些方法,如下所示:
在ApplicationContoller
before_filter :authorize, :except => [:index, :show, :different_controller_method]
其中在:different_controller_method
中定义UserController
。我们可以这样做吗?
但是你想保持这种状态吗?想象一下其他人正在阅读您的 UserController 类定义。她通常会通过查看您定义了 UserController 类的同一文件来检查 UserController#differnt_controller_method 上是否有任何过滤器。在那里找不到任何过滤器,她会假设 different_controller_method 没有任何过滤器。
最好将相关的东西放在一起,否则维护应用程序会变得很困难,因为添加功能或修复错误需要更改许多文件。我强烈建议您观看Sandi Metz 在 GoRuCo 2009 上的演讲。
在清理您问题的语法时,我注意到您没有使用符号来描述您的“不同”方法。
before_filter :authorize, :except => [:index, :show, :different_controller_method]
并不是
before_filter :authorize, :except => [:index, :show, different_controller_method]
注意冒号。
我们可以这样做吗?
是的你可以。
通常这应该工作。正如@jdl 所说,确保您使用的是符号。
大多数时候,我们使用不同的方法。在你的ApplicationController
你写
before_filter :authorize
因此,根据定义,所有访问都是授权的。然后你UsersController
可以添加一个例外:
skip_before_filter :authorize, :only => [:index, :show, :different_controller_method]
希望这可以帮助。