2017-02-04 8 views
0

Ich versuche, Aasm state machine für den Übergang von einem state zu einem anderen zu verwenden. Aber die issue ist, dass die statemachine durch alle ohne Aufruf geht. Hier ist der Code, ist mitstateMachine Zustand gibt immer den letzten Zustand statt der ursprünglichen

include AASM 

    aasm column: 'state' do 
    state :pending, initial: true 
    state :checked_in 
    state :checked_out 
    event :check_in do 
     transitions from: :pending, to: :checked_in, guard: :verify_payment? 
    end 
    event :check_out do 
     transitions from: :checked_in, to: :checked_out 
    end 
    end 

    def verify_payment? 
    self.payment_status=="SUCCESS" 
    end 

Hier Wenn ich Booking.create tun gibt es mit checked_out Zustand sogar zunächst statt der erwarteten pending

Warum seine Rückkehr den last erwarteten Zustandes statt initial ??

Antwort

0

Das Problem stellte sich heraus, dass ich zwei database fields namens check_in und check_out habe. So wird activerecord betrachten es als Attribut Methoden und feuern diese Ereignisse auf creation.So hier das Update ist die event Namen etwas anderes als die in der Datenbank zu ändern

include AASM 

     aasm column: 'state' do 
     state :pending, initial: true 
     state :checked_in 
     state :checked_out 
     event :move_to_check_in do 
      transitions from: :pending, to: :checked_in, guard: :verify_payment? 
     end 
     event :move_to_check_out do 
      transitions from: :checked_in, to: :checked_out 
     end 
     end 

     def verify_payment? 
     self.payment_status=="SUCCESS" 
     end 
Verwandte Themen