有沒有一種很好的方法可以告訴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
,並有如果something_that_might_raise_exception
確實提出了一個異常log_failure
被調用。理想的情況是我想避免更改AASM所以我很安全的,如果我需要如果你使用它的升級在未來