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