Rails: как обрабатывать данные при возникновении ошибки при создании - PullRequest
1 голос
/ 16 января 2010

Итак, у меня есть форма подписки, где пользователь одновременно создает новую учетную запись и подписывается на месячный план.

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

Но проблема, с которой я столкнулся, заключается в том, что они случайно вводят неверный номер кредитной карты ... как лучше всего с этим справиться?

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

Итак, вопрос в том, как бы вы справились с этим? Вы бы перевели их на страницу с ошибкой, которая только данные для выставления счетов? Или что еще? Не уверен, что лучший способ справиться с этим ...

Ответы [ 2 ]

0 голосов
/ 16 января 2010

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

1) просто сохраните данные после того, как все будет успешно проверено. Вы можете использовать пользовательскую проверку для проверки кредитной карты. см. snippets.dzone.com/posts/show/5266

2) использовать две разные модели (users и credit_cards) и использовать find_or_create (на самом деле вы можете использовать find_or_create также с одной моделью) см http://blogs.law.harvard.edu/lianaleahy/2008/05/19/find_or_create/

0 голосов
/ 16 января 2010

Не знаю ни одного стандарта, но я уверен, что лучший способ - удалить вновь созданную учетную запись пользователя, если проверка биллинга не удалась (поле created_at может помочь обнаружить тайм-ауты).

Этот механизм реализован с помощью транзакций базы данных , и в Rails он не требует особых усилий. Но убедитесь, что вы не используете эксклюзивную блокировку вашей базы данных.

...