Внимательно посмотрите на Полное руководство по аутентификации веб-сайтов на основе форм и спросите себя, действительно ли вам нужна капча.
Кроме того, вы можете использовать Обратные вызовы : after_validation
, before_save
, around_save
, after_save
, before_create
, around_create
, after_create
, before_update
, around_update
, after_update
для обработки содержимого, все еще находящегося в вашей транзакции.
Чтобы вызвать один из этих обратных вызовов, просто объявите их в своем model
Если вам необходимо использовать капчу, я бы сделал это с помощью javascript и ajax, чтобы добавитьэто к вашей форме, прежде чем пользователь отправит его.
Вы не должны делать это в контроллере после получения сообщения формы, так как вам придется:
- Сохранять заполненные значения формы в сеансе после проверки (не сохранять)
- Перенаправить пользователя на страницу с изображением капчи (что приведет любого пользователя в замешательство)
- Несколько раз проверить код проверки перед его прохождением (они совершенно не читаются)
- Получитьмодель вне сеанса (которую вы даже не представляете, какая именно)
- Вызовите save для модели, чтобы фактически записать ее в вашу БД.
Таким образом, в основном вы избегаете запускатранзакция до того, как капча будет пройдена.