Я использую программу для проверки подлинности и имею некоторые before_filters в своем контроллере приложений. Проблема, которую я вижу, заключается в том, что когда я пытаюсь выйти из системы before_filter, она перехватывает это и удерживает меня в представлении, которое я настроил в файле before_filter. Есть ли способ указать, какие контроллеры должны быть исключены из контроллера приложения или какого-либо другого файла?
Укажите, какие контроллеры должны исключать из before_filter
Ответ 1
Вы можете выбрать фильтр с помощью :only
или :except
.
before_filter :filter_name, :except => [:action1, :action2]
Или, если фильтр (как я вижу сейчас в вашем случае) определен в ApplicationController
, и вы хотите обойти его в контроллере подкласса, вы можете использовать skip_before_filter
с теми же квалификациями в подклассе контроллер:
skip_before_filter :filter_name, :except => [:action1, :action2]
Ответ 2
В контроллере, где вы хотите пропустить фильтр до указанного в унаследованном контроллере, вы можете сказать, что рельсы пропускают фильтр
class ApplicationController
before_filter :authenticate_user!
end
class SessionsController < ApplicationController
skip_before_filter :authenticate_user!
end
Ответ 3
В config/application.rb
config.to_prepare do
Devise::SessionsController.skip_before_filter :authenticate_user!
end
Ссылка:
Как пропустить файл before_filter для SessionController для Devise?
Ответ 4
Ответы выше хорошо, за исключением:
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
.