2016-02-16 2 views
0

Так что я просто начинаю работу с государственных машин. Одним из моих требований является то, что он отправляет запрос и ожидает ответа. Запрос создает дочерний атрибут, и получатель может отклонить или принять.Неоднократно проверяйте, был ли изменен дочерний объект.

То, что я хочу прослушать, изменено в атрибуте childs approved, который является логическим. Если это правда, переходите к X, иначе переходите к Y.

Теперь я пытаюсь понять, как написать метод, который я могу использовать на конечной машине, которая по существу проверяет, изменился ли дочерний атрибут (скажем, он ждет и проверяет на 10 секунд). Я не возражаю, если пользователь ждет.

В настоящее время мое состояние машины с помощью AASM выглядит следующим образом:.

aasm column: 'state' do 
    state :pending, initial: true 
    state :connecting 
    state :unavailable 
    state :requesting 
    state :declined 
    state :processing 
    state :finished 
    state :errored 

    event :connect, after: :find_recipient do 
     transitions from: :pending, to: :connecting 
    end 

    event :unavailable do 
     transitions from: :connecting, to: :unavailable 
    end 

    event :request do 
     transitions from: :connecting, to: :requesting 
    end 

    event :decline do 
     transitions from: :requesting, to: :declined 
    end 

    # if recipient is found 
    event :process, after: :charge_card do 
     transitions from: :connecting, to: :processing 
    end 

    # payment succeeded 
    event :finish, after: :track_payment do 
     transitions from: :processing, to: :finished 
    end 

    # payment failed 
    event :fail do 
     transitions from: :processing, to: :errored 
    end 
    end 

Так в настоящее время у меня есть фоновое задание, которое начинается, когда Order создается (что эта модель Она также может инициировать государственную машину с order.connect!

теперь в настоящее время она движется к requesting так вот где я хотел бы создать метод, который по существу идет что-то вроде:

def await_reply 
    # access self.request and see the value of request.approved 
    # if approved haven't changed then proceed to self.unavailable! 
    # if approved is true then proceed to self.process! 
    # if approved is false then proceed to self.decline! 
end 

ответ

0

Зачем вам ждать? Вы можете просто использовать order.approved?, чтобы проверить, одобрено ли оно.

Смежные вопросы