我在铁轨上使用称为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_due
到paid
的特定过渡。
当您在单个过渡中覆盖两个流时,第一步是为此流程进行单独的过渡并将回调附加到它。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
,在过渡完成后将执行回调。
请查看文档并阅读有关回调及其打电话的顺序以满足您的需求