Обычно я согласен, маршруты должны быть простым отображением и не содержать сложной логики. Но метод Devise (второй пример в OP), хотя, возможно, и не лучший способ защиты от несанкционированного доступа, полезен, по крайней мере, для одного очень распространенного случая использования, а именно - маршрутизация на одну «домашнюю страницу» для вошедшего в систему пользователя (например, панель инструментов) и на другую домашнюю страницу для не вошедшего в систему пользователя (например, страницу регистрации). Это стандарт IMO, достаточный для того, чтобы заслужить механизм прямой маршрутизации, который позволяет легко обрабатывать ошибки с помощью redirect_to root_path и направлять его в нужное место с помощью одного перенаправления (одна транзакция HTTP), сохраняя флэш-сообщения (которые могут скорее всего будет потеряно при втором перенаправлении внутри before_filter), без добавления большого количества дополнительного кода в ваши контроллеры.
Метод «authenticate [d]» описан очень кратко здесь