Укажите, какие контроллеры исключать из before_filter - PullRequest
39 голосов
/ 16 мая 2011

Я использую devise для аутентификации и у меня в контроллере приложения есть несколько before_filters. Проблема, которую я вижу, заключается в том, что когда я пытаюсь выйти из системы, before_filter перехватывает это и удерживает меня в представлении, которое я настроил в before_filter. Могу ли я указать, какие контроллеры следует исключить из контроллера приложения или другого файла?

Ответы [ 4 ]

100 голосов
/ 16 мая 2011

В контроллере, в котором вы хотите пропустить фильтр перед указанным в унаследованном контроллере, вы можете указать rails пропустить фильтр

class ApplicationController
  before_filter :authenticate_user!
end

class SessionsController < ApplicationController
  skip_before_filter :authenticate_user!
end
77 голосов
/ 16 мая 2011

Вы можете назначить фильтр с :only или :except.

before_filter :filter_name, :except => [:action1, :action2]

Или, если фильтр (как я теперь вижу, имеет место в вашей ситуации) определен в ApplicationController и вы хотите обойти его в контроллере подкласса, вы можете использовать skip_before_filter с такими же квалификациями в подклассе контроллер:

skip_before_filter :filter_name, :except => [:action1, :action2]
13 голосов
/ 18 мая 2013

В config / application.rb

config.to_prepare do
  Devise::SessionsController.skip_before_filter :authenticate_user!
end

Ссылка:

Как пропустить фильтр before_filter для Devise's SessionsController?

2 голосов
/ 20 апреля 2017

Ответы выше хороши, за исключением: 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.

...