2010-01-16 15 views
1

J'ai donc un formulaire d'abonnement dans lequel un utilisateur crée simultanément un nouveau compte et s'abonne à un abonnement mensuel. Ils saisissent donc un nom d'utilisateur, un e-mail, un mot de passe et toutes les informations de facturation/carte de crédit habituelles.Rails: Comment gérer les données en cas d'erreur lors de la création

Mais le problème que je suis est de dire qu'ils entrent accidentellement un numéro de carte de crédit incorrect ... quelle est la meilleure façon de gérer cela?

Je dois d'abord créer le compte d'utilisateur pour pouvoir avoir un ID de ligne de base de données (pour le service de facturation tiers), mais puisque j'ai tout géré d'une seule traite dans ma méthode create, si l'utilisateur corrige leur information de carte et re-soumet, il leur dit que le compte existe déjà (puisque le compte d'utilisateur a été réellement déjà créé).

Alors, la question est de savoir comment géreriez-vous cela? Souhaitez-vous les amener à une page d'erreur qui est seulement les données de facturation? Ou quoi d'autre? Je ne sais pas quelle est la meilleure façon de gérer cela ...

Répondre

0

Je ne suis au courant d'aucune norme, mais je suis sûr que le meilleur moyen est de supprimer le compte d'utilisateur nouvellement créé si la vérification du service de facturation a échoué (un champ created_at peut aider à détecter les délais d'attente).

Ce mécanisme est implémenté via database transactions et Rails ne demande pas beaucoup d'efforts. Mais assurez-vous que vous n'utilisez pas de verrouillage exclusif sur votre base de données.

0

à mon avis, vous pouvez gérer cela de deux façons différentes

1) Il suffit d'enregistrer les données après tout a été vérifié avec succès. vous pouvez utiliser une validation personnalisée pour vérifier la carte de crédit. voir snippets.dzone.com/posts/show/5266

2) utilisent deux modèles différents (utilisateurs et credit_cards) et utiliser find_or_create (en fait, vous pouvez utiliser find_or_create aussi avec un modèle) voir http://blogs.law.harvard.edu/lianaleahy/2008/05/19/find_or_create/