Подтвердить что ты не робот

Before_filter не отменяет действие

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

before_filter :false_filter

и в приложении application_controller.rb:

def false_filter
  puts "false filter running"
  false
end

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

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

4b9b3361

Ответ 1

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

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

Тот же текст отображается в 2.3.8 guide.

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