Ruby on rails 在过滤器之前做什么:除了跨子类控制器的工作?
我想在Ruby on rails 在过滤器之前做什么:除了跨子类控制器的工作?,ruby-on-rails,actioncontroller,Ruby On Rails,Actioncontroller,我想在ApplicationController的过滤器中声明来自不同控制器的一些方法,如下所示: 在应用程序调用程序中 before\u filter:authorize,:except=>[:index,:show,:different\u controller\u method] 其中:在UserController中定义了不同的\u控制器\u方法。我们可以这样做吗 我们可以这样做吗 是的,你可以。但是你想保持这样吗?假设其他人正在阅读您的UserController类定义。她会检查Use
ApplicationController
的过滤器中声明来自不同控制器的一些方法,如下所示:
在应用程序调用程序中
before\u filter:authorize,:except=>[:index,:show,:different\u controller\u method]
其中:在UserController
中定义了不同的\u控制器\u方法。我们可以这样做吗
我们可以这样做吗
是的,你可以。但是你想保持这样吗?假设其他人正在阅读您的UserController类定义。她会检查UserController#differnt_controller#方法上是否有任何过滤器,通常是通过查看定义UserController类的同一文件。在那里找不到任何过滤器,她会假设不同的控制器方法没有任何过滤器
最好将相关的东西放在一起,否则维护应用程序会变得很困难,因为添加一个特性或修复一个bug需要更改许多文件。我强烈推荐你观看桑迪·梅茨在2009年戈鲁科颁奖礼上的表演 在整理你问题的语法时,我注意到你没有用符号来描述你的“不同”方法
before\u filter:authorize,:except=>[:index,:show,:different\u controller\u method]
而不是
before\u filter:authorize,:except=>[:index,:show,不同的\u控制器\u方法]
注意冒号 正常情况下,这应该是可行的。确保您使用的是符号,正如@jdl所说的那样
但大多数时候,我们使用的是不同的方法。在应用程序控制器中编写
before_filter :authorize
因此,根据定义,所有访问都是授权的。然后,您可以在UsersController
中添加异常:
skip_before_filter :authorize, :only => [:index, :show, :different_controller_method]
希望这有帮助。谢谢Ardsrk!但我只是想知道我们怎么做?好的。但我想告诉你正确的方法。在同一控制器类中声明与控制器方法相关的筛选器是Rails约定。如您所述(:ApplicationController中除外)如果不使用列,则会出现错误:未定义的局部变量或方法“different\u controller\u method”。我正在使用:除了[:不同的控制方法]是的,我也这么做了。但这对我不起作用。您和我的代码与我在上面表格中发布的代码完全相同,请让我知道我在哪里出错。您的意思是:它不工作?你收到错误了吗?不是对所有的方法都有效吗?这些方法拼写正确吗?请更详细地描述发生了什么。否则很难有任何帮助。除了作用域,它只适用于应用程序方法,我需要使它也适用于其他控制器的方法。我把我的问题讲清楚了吗?对于测试:将该语句移动到正确的控制器:它在那里工作吗?我的直觉是不会的。