0

У меня есть много контроллеров в приложении Rails, и перед некоторыми действиями в разных контроллерах мне нужно использовать before_filter. Фильтр before будет выполнять один и тот же код всех этих действий. Есть ли чистый DRY способ (например, в application_controller), чтобы указать список действий, которые должны запускать этот before_filter? Я попытался использовать before_filer во всех контроллерах (9), но это выглядит так повторяемо, так как это тот же код.Запустите перед фильтром большое количество действий в 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_filter в application_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