Есть ли хороший способ сообщить AASM, что если при обработке какого-либо события assm_event возникает исключение, я хочу, чтобы эта ошибка была обнаружена конкретным блоком кода?
например, сейчас я делаю что-то вроде
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, поэтому я в безопасности, если мне нужно будет обновить его в будущем