Rails:如何在创建时出错时处理数据

时间:2010-01-16 05:18:26

标签: ruby-on-rails standards billing

所以我有一个订阅表单,用户可以同时创建一个新帐户并订阅月度计划。

因此,他们会输入用户名,电子邮件,密码以及所有常用的信用卡/结算信息。

但我遇到的问题是他们不小心输入了错误的信用卡号码...处理这个问题的最佳方式是什么?

我需要先创建用户帐户,这样我就可以拥有一个数据库行ID(用于第三方计费服务),但由于我在create方法中一举处理了所有这些,用户更正了他们的卡信息并重新提交,它告诉他们该帐户已经存在(因为用户帐户实际上已经创建)。

所以,这里的问题是你将如何处理这个问题?您会将他们带到结算数据的错误页面吗?还有什么?不确定处理这个问题的最佳方法是......

2 个答案:

答案 0 :(得分:0)

不知道任何标准,但我确信最好的方法是在结算服务检查失败时删除新创建的用户帐户(字段created_at可能有助于检测超时)。

此机制是通过database transactions实现的,并且在Rails中不需要花费太多精力。但请确保您没有在数据库中使用独占锁定。

答案 1 :(得分:0)

在我看来,你可以用两种不同的方式处理这个问题

1)只需在成功验证所有内容后保存数据。 您可以使用自定义验证来检查信用卡。 请参阅snippets.dzone.com/posts/show/5266

2)使用两个不同的模型(用户和credit_cards)并使用find_or_create (实际上你也可以使用find_or_create和一个模型) 见http://blogs.law.harvard.edu/lianaleahy/2008/05/19/find_or_create/