2011-05-15 2 views
34

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

ответ

74

Вы можете выбрать фильтр с :only или :except.

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

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

skip_before_filter :filter_name, :except => [:action1, :action2] 
97

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

class ApplicationController 
    before_filter :authenticate_user! 
end 

class SessionsController < ApplicationController 
    skip_before_filter :authenticate_user! 
end 
+0

спасибо за это .. – Orlando

+2

Это ответ на исходный вопрос в более ясном mannor, однако 'skip_before_filter: filter-name,: except => [: action1,: action2]' из принятого ответа - отличный наконечник! – colsen

+0

@Jesse Wolgamott, а что, если контроллер, где я хочу пропустить фильтр перед фильмом, живет в камне? Есть ли способ указать на before_filter нечто большее, чем просто действия? – hunteros

1

Ответы выше хороши, кроме: 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.

Смежные вопросы