Ruby AASM(充当状态机):处理付款:将前回调与后卫相结合

时间:2018-06-12 16:51:46

标签: ruby state-machine aasm

让我们假设一个非常简单的Payment类,如下所示:

class Payment
  include AASM

  aasm do

    state :created
    state :paid
    state :refunded

    event :pay do

      transitions from :created, to :paid

    end

  end

end

因此,可以致电payment.pay来触发付款,进行相应的API调用。

非常重要的是,如果付款实际成功,则只会发生从createdpaid的转换。

1)我认为API调用应放在before事件的:pay回调中,但如果API调用不成功则不会停止转换(让我们假设API调用不引发异常,它只返回一个状态)。

2)然后我认为我应该将before回调与警卫结合起来;使用before回调来调用API,并在模型上设置它的结果(例如使用attr_accessor)。然后,如果付款成功,警卫只允许其从created转换为paid状态。

这是在使用aasm的状态机中处理此类事件转换的惯用方法吗?我读了标记为aasm的所有堆栈溢出问题和gem文档,但仍然有问题是什么是实现这些安全转换的最佳方法。

0 个答案:

没有答案