铁路aasm;如果发生特定的过渡,如何采取行动



我在铁轨上使用称为aasm的状态机GEM。

有一个事件具有两种类型的过渡。

三种三种状态

state pending
state past_due
state paid

pending可以更改为paid past_due可以更改为paid

  event :pay do
      transitions from: [:pending, :past_due], to: :paid
  end

所以只有在past_due进行paid

时,我想在这里采取一些行动

有什么想法?

做到这一点的一种方法是在两个单独的语句中定义过渡:

event :pay do
  transitions from: :pending, to: :paid
  transitions from: :past_due, to: :paid, after: :do_your_custom_action
end

在文档中查看有关回调的更多信息。

您可以将after回调连接到过渡和事件。

由于两个过渡的事件相同,您应该将回调附加到从past_duepaid的特定过渡。

当您在单个过渡中覆盖两个流时,第一步是为此流程进行单独的过渡并将回调附加到它。as,

transitions :from => :past_due, :to => :paid, :after => your_required_action

个人,我将一个块传递给after回调

event :pay do
  after do
    # do_something
  end
  transitions from: [:pending, :past_due], to: :paid
end

这样,我确保在event :pay完成后将执行do_something

另一种方法是将回调附加到transitions,在过渡完成后将执行回调。

请查看文档并阅读有关回调及其打电话的顺序以满足您的需求

相关内容

  • 没有找到相关文章

最新更新