У меня есть много контроллеров в приложении Rails, и перед некоторыми действиями в разных контроллерах мне нужно использовать before_filter
. Фильтр before будет выполнять один и тот же код всех этих действий. Есть ли чистый DRY способ (например, в application_controller
), чтобы указать список действий, которые должны запускать этот before_filter
? Я попытался использовать before_filer
во всех контроллерах (9), но это выглядит так повторяемо, так как это тот же код.Запустите перед фильтром большое количество действий в Ruby on Rails 4
ответ
почему нет 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
попробовать выше код в качестве ссылки
проблема в том, что если я поместил ее в application_controller, она будет выполняться перед действием ALL. и я хочу, чтобы он исполнялся только около 20% действий, не всех из них. У меня около 70 действий, и я хочу, чтобы before_filter выполнялся только до 12 действий – anyavacy
, поэтому для этого вы можете иметь 'skip_before_filter: method_defined_in_application_controller, за исключением: [: methods_for_which_it_should_execute]' теперь он будет работать только для этих 20% действий. вы должны определить это в контроллерах, где вам нужно его выполнить для определенных методов. – Kushal
@anyavacy. Я отредактировал свой ответ, хотя – Kushal
Проверили ли вы этот вопрос? http://stackoverflow.com/questions/6011764/specify-which-controllers-to-exclude-from-before-filter –
thnks, но это не отвечает на мой вопрос. – anyavacy