2015-06-21 76 views
3

创建新用户(在我的用户模型中)我也想创建一个条带客户。这两个行动只有在他们一起成功时才能完成(就像我不想要没有用户的客户,反之亦然)。出于这个原因,我认为将它们包装在交易中是一个好主意。但是,我不能正确地做。我不相信我正在覆盖创建方法。如果任何人有一个建议作为一个更好的方式来做到这一点或我做错了,它将不胜感激。谢谢!关于创建交易的导轨

def create 
    User.transaction do 
     super 
     create_stripe_customer(self) 
    end 
    end 

    def destroy 
    User.transaction do 
     super 
     delete_stripe_customer(self) 
    end 
    end 
+0

我一般使用事务块作为一个关键部分与数据库锁,以防止竞争条件。在你的情况下,如果你在用户模型的''after_create'回调中调用'create_stripe_customer',会不会有问题?如果create_stripe_customer失败,那么您的用户创建也应该回滚。 –

+0

我在关注。有人必须对这个问题有一个很好的答案。 –

+0

after_creation方法失败会导致回滚?如果这样做是完美的,并且会解决我的问题。我最初是这样做的,但不确定失败是否会导致回滚。 – soliman

回答

1

我已经对你的问题做了一些研究,使用after_create似乎没问题,只要发生异常就会引发异常。这也将回滚交易。只需使用默认回调。

Here is a good answer related to the question.

+0

谢谢。我在Vijay上面的建议之后也研究了这一点,并且它似乎执行了所需的结果。谢谢你们的帮助! – soliman