2017-02-22 5 views
0

레일에 AASM이라는 상태 시스템 보석을 사용합니다.레일 AASM; 특정 전환이 발생하는 경우 어떤 작업을 수행하는 방법

두 가지 유형의 전환이있는 이벤트가 있습니다. 국가의

세 가지 세 가지 유형

state pending 
state past_due 
state paid 

pendingpaid past_due로 변경 될 수 past_due이가는 경우에만 내가 어떤 행동을 할 싶어요 그래서 여기 paid

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

으로 변경 될 수 있습니다 paid.

아이디어가 있으십니까? 이 작업을 수행하는

답변

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

전환 및 이벤트 모두에 콜백을 첨부 할 수 있습니다.

이벤트가 두 전환에 모두 동일하므로 past_due에서 paid 사이의 특정 전환에 콜백을 첨부해야합니다.

단일 전환에서 두 흐름을 모두 다루므로 첫 번째 단계는이 흐름에 대해 별도의 전환을 만들어 콜백을 연결하는 것입니다. 개인적으로

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에 콜백을 첨부하는 것입니다. 여기서 콜백은 전환이 완료된 후에 실행됩니다.

docs와 read about callbacks을 살펴보고 필요에 따른 전화 주문