2017-02-22 71 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及其打電話來滿足您需要的順序

相關問題