Серебряной пули нет.
Валидация в модели защищает вас от программных источников недействительности. Однако пользователи не получают прямой доступ к вашим моделям, а только через контроллеры и, в конечном итоге, через формы. Большую часть времени вам требуется дополнительная проверка, которая характерна для определенной формы или определенного контроллера и которая не подходит для модели.
Это аргумент в пользу слоя проверки вне модели. В идеале вы можете создать отдельный объект проверки (может быть привязанный к определенной форме), который используется контроллером. Иногда вам может потребоваться дополнительная проверка в самом контроллере.
Проверка не является двоичной. Существует много уровней проверки и разные типы проверки, необходимые в разных контекстах. Вам может потребоваться проверка как в модели, так и в контроллере.