2017-02-22 60 views
0

我在rails上使用名为AASM的状态机gem。Rails AASM;如果发生特定转换,该怎么办?

有一个事件有两种类型的转换。

三个三种状态

state pending 
state past_due 
state paid 

pending可以变成paid past_due可以变成paid

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

所以在这里我很想做一些动作只有past_duepaid

有什么想法?要做到这一点

回答

1

的一种方法是在两个单独的语句来定义转换:

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

查看更多有关回调in the docs

0

您可以将after回调附加到转场和事件。

由于事件对于两个转换都是相同的,所以您应该将回调附加到从past_duepaid的特定转换。

由于您在一次转换中涉及两个流程,因此第一步将为此流程单独转换并将回调附加到该流程。至于,

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

就个人而言,我传递一个块到after回调

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

这样,我保证event :pay结束后do_something将被执行。

另一种方法是将回调附加到transitions,其中回调将在转换完成后执行。

请看一看的文档和read about callbacks及其打电话来满足您需要的顺序

相关问题