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