0

在我的Rails应用程序中有很多控制器,并且在不同控制器中的某些操作之前,我需要使用before_filter。之前的过滤器将执行所有这些操作的相同代码。是否有干净的DRY方式(例如application_controller)来指定应该运行此操作的列表before_filter?我试图在所有控制器(9)中使用before_filer,但由于它是相同的代码,因此看起来如此重复。在Ruby on Rails 4中过滤大量操作之前运行

+0

你检查这个问题? http://stackoverflow.com/questions/6011764/specify-which-controllers-to-exclude-from-before-filter –

+0

thnks但它不回答我的问题。 – anyavacy

回答

1

为什么不是ApplicationController?如果您在应用程序控制器中定义了任何before_filter,那么它将在每个请求中执行。

现在你说它看起来是重复性的,但实际上并没有。提及before_filterapplication_controller.rb实际上代表DRY AKA,您不必在其他地方指定before_filter

当然,并不是所有的9个控制器会得到在同一时间,以便ApplicationController执行是首选的方式

class ApplicationController < ActionController::Base 
    ... 
    before_filter :pre_execute_action 
    ... 
end 
class MyController < ApplicationController 
    ... 
    skip_before_filter :pre_execute_action, except: [:methods_for_which_it_should_execute] 
    ... 
end 

试试上面的代码作为参考

+0

问题是,如果我把它放在application_controller中,它会在ALL动作之前执行。我希望它只能执行大约20%的操作,而不是所有的操作。我有大约70个动作,我希望before_filter只在12个动作 – anyavacy

+0

之前被执行,因此你可以使用'skip_before_filter:method_defined_in_application_controller:[:methods_for_which_it_should_execute]'现在它只会运行这20%的动作。你必须在需要执行某些方法的控制器中定义它 – Kushal

+0

@anyavacy我编辑了我的答案 – Kushal