我在rails上使用名为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
才能采取行动。
有什么想法吗?
答案 0 :(得分:1)
这样做的一种方法是在两个单独的语句中定义转换:
event :pay do
transitions :from => :pending, :to => :paid
transitions :from => :past_due, :to => :paid, :after => do_your_custom_action
end
详细了解回调in the docs。
答案 1 :(得分:0)
您可以将after
回调附加到转换和事件。
由于两个转换的事件都相同,因此您应该将回调附加到从past_due
到paid
的特定转换。
当您在单个转换中覆盖两个流时,第一步是为此流进行单独转换并将回调附加到它。如,
transitions :from => :past_due, :to => :paid, :after => your_required_action
答案 2 :(得分:0)
就个人而言,我将一个块传递给after
回调
event :pay do
after do
# do_something
end
transitions from: [:pending, :past_due], to: :paid
end
这样我确保在do_something
完成后执行event :pay
。
另一种方法是将回调附加到transitions
,其中回调完成后将执行回调。
请查看文档和read about callbacks及其调用以满足您需求的顺序