Я использую устройство для аутентификации и имею некоторые before_filters в своем контроллере приложений. Проблема, которую я вижу, заключается в том, что когда я пытаюсь выйти из системы before_filter, она перехватывает это и удерживает меня в представлении, которое я установил в файле before_filter. Есть ли способ указать, какие контроллеры должны быть исключены из контроллера приложения или какого-либо другого файла?Укажите, какие контроллеры должны исключать из before_filter
ответ
Вы можете выбрать фильтр с :only
или :except
.
before_filter :filter_name, :except => [:action1, :action2]
Или, если фильтр (как я теперь вижу, это происходит в вашей ситуации) определяется в ApplicationController
, и вы хотите, чтобы обойти его в контроллере подкласса, вы можете использовать skip_before_filter
с той же квалификации в подклассе контроллер:
skip_before_filter :filter_name, :except => [:action1, :action2]
в контроллере, где вы хотите, чтобы пропустить перед фильтром, указанным в унаследованном контроллере, вы можете сказать, рельсы, чтобы пропустить фильтр
class ApplicationController
before_filter :authenticate_user!
end
class SessionsController < ApplicationController
skip_before_filter :authenticate_user!
end
В конфигурации/application.rb
config.to_prepare do
Devise::SessionsController.skip_before_filter :authenticate_user!
end
Референт:
How to skip a before_filter for Devise's SessionsController?
Ответы выше хороши, кроме: DEPRECATION WARNING: skip_before_filter is deprecated and will be removed in Rails 5.1. Use skip_before_action instead.
Поэтому, пожалуйста, используйте before_action
и skip_before_action
вместо *-filter
.
спасибо за это .. – Orlando
Это ответ на исходный вопрос в более ясном mannor, однако 'skip_before_filter: filter-name,: except => [: action1,: action2]' из принятого ответа - отличный наконечник! – colsen
@Jesse Wolgamott, а что, если контроллер, где я хочу пропустить фильтр перед фильмом, живет в камне? Есть ли способ указать на before_filter нечто большее, чем просто действия? – hunteros