before_filter не отменяет действие - PullRequest
50 голосов
/ 15 июня 2011

У меня проблемы с получением фильтров для работы в приложении Rails, которое я недавно обновил с 1.9 (?) До 2.3.11. Чтобы попытаться отладить его, я поместил before_filter в контроллер:

before_filter :false_filter

и следующее в application_controller.rb:

def false_filter
  puts "false filter running"
  false
end

Затем я вызываю метод из cucumber / webrat или из браузера, и в то время как фильтр вызывается (я вижу точки, выводящие сообщение), цепочка фильтров не прерывается.

Мне интересно, есть ли какой-нибудь шаблонный код, который не был сгенерирован. Кто-нибудь может подсказать, где искать?

1 Ответ

96 голосов
/ 15 июня 2011

Ничто не обращает никакого внимания на возвращаемое значение фильтра. Если вы хотите прекратить обработку, вы должны сделать что-то из вашего фильтра или перенаправить куда-нибудь еще, из тонкого руководства :

Если фильтр перед отображением или перенаправлением, действие не будет запущено. Если после этого фильтра запланированы дополнительные фильтры, они также отменяются.

Тот же текст появляется в руководстве 5.2.0 .

Такое поведение имеет смысл, если цепочка фильтров не завершится (т.е. прекратит фильтрацию частично), то вы в конечном итоге вызовете методы контроллера с вещами, не настроенными так, как они ожидали, и просто причинять боль, страдание и замешательство, и это совсем не будет дружеским или веселым.

...