Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在过滤器之前做什么:除了跨子类控制器的工作?_Ruby On Rails_Actioncontroller - Fatal编程技术网

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”。我正在使用:除了[:不同的控制方法]是的,我也这么做了。但这对我不起作用。您和我的代码与我在上面表格中发布的代码完全相同,请让我知道我在哪里出错。您的意思是:它不工作?你收到错误了吗?不是对所有的方法都有效吗?这些方法拼写正确吗?请更详细地描述发生了什么。否则很难有任何帮助。除了作用域,它只适用于应用程序方法,我需要使它也适用于其他控制器的方法。我把我的问题讲清楚了吗?对于测试:将该语句移动到正确的控制器:它在那里工作吗?我的直觉是不会的。