Есть ли хороший способ рассказать AASM о том, что если возникает исключение при обработке любого assm_event, я хочу, чтобы эта ошибка попала на определенный блок кода?Могу ли я заставить AASM запускать определенный метод при сбое события?
например, в настоящее время я делаю что-то вроде
assm_state :state_1
assm_state :state_2, :before_enter => :validate_something
assm_state :failed
assm_event :something_risky do
transition :from => :state_1, :to => :state_2
end
assm_event :fail do
transition :from => [:state_1, :state_2], :to => :failed
end
def validate_something
begin
something_that_might_raise_error
rescue
self.record_error
self.fail
end
end
и то, что я предпочел бы сделать, это что-то вроде
assm_state :state_1
assm_state :state_2, :before_enter => :validate_something
assm_state :failed
assm_event :something_risky, :on_exception => :log_failure do
transition :from => :state_1, :to => :state_2
end
assm_event :fail do
transition :from => [:state_1, :state_2], :to => :failed
end
def validate_something
something_that_might_raise_exception
end
def log_failure
self.record_error
self.fail
end
и имеют log_failure
быть вызван, если something_that_might_raise_exception
действительно вызывает исключение. В идеале я хочу, чтобы избежать изменения AASM, так что я в безопасности, если мне нужно обновить его в будущем