Existe-t-il un moyen agréable de dire à AASM que si une exception est levée lors du traitement d'un assm_event, je veux que cette erreur soit détectée par un bloc de code spécifique?Puis-je demander à AASM d'exécuter une méthode spécifique en cas d'échec de l'événement?
par exemple, actuellement je fais quelque chose comme
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
et ce que je préférerais faire quelque chose comme
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
et ont log_failure
être appelé si something_that_might_raise_exception
soulève une exception. Idéalement, je veux éviter de changer AASM Je suis si sûr si je dois lui mettre à jour à l'avenir