Код выполняется, потому что Ruby является интерпретируемым языком. По сути, когда интерпретатор встречает строку кода, он выполняет ее.
Вы должны различать логику конечного автомата и бизнес-логику. Не совсем понятно, что превосходит ваше объяснение, но:
- хотите ли вы, чтобы при вызове состояний вызывались методы, используйте обратные вызовы:
after_transition on: :decisao, do: ->(*) { Decisao.AnalisarPlanilha }
- хотите ли вы, чтобы состояния изменялись из ваших методов, явно вызывайте события:
def Decisao.AnalisarPlanilha
estado.decisao! # assuming estado in an instance of Estado class
end
Sidenote: существует общее соглашение о ruby для именования методов в случае змеи (analisar_planilha
), а не AnalisarPlanilha
, поскольку все, что начинается с заглавной буквы, рассматривается как константа .