나는 현재 기본적으로 다음을 수행하는 클래스에서 일하고 있어요AASM 상태 머신 예외 처리 예? ("! get_things"이벤트) :
- 모델이
- 데이터를 가져 오는 작성되는
- 예외가 발생하는 경우, 상태가되어야 성공은, 상태가
class Fetcher < ActiveRecord::Base
include AASM
aasm do
state :created, initial: true
state :success, :failed
event :succeed do
transitions from: :created, to: :success
end
event :fail do
transitions from: :created, to: :failed
end
end
def read_things!(throw_exception = false)
begin
raise RuntimeError.new("RAISED EXCEPTION") if throw_exception
self.content = open("https://example.com?asd=324").read
self.succeed!
rescue => e
self.fail!
end
end
end
a = Fetcher.new
a.read_things!(throw_exception = true)
=> state should be failed
a = Fetcher.new
a.read_things!(throw_exception = false)
=> state should be succeess
그것은 작동하지만, 할 어떻게 든 정말 좋지 않아 보인다는 ...
나는 추가 정보
에 나와있는 오류 처리 같은 것을 선호 :나는 다음과 같은 그것을 구현하려고
event :read_things do
before do
self.content = open("https://example.com?asd=324").read
self.succeed!
end
error do |e|
self.fail!
end
transitions :from => :created, :to => :success
end
하지만 실제로 여기가 가장 좋은 방법인지 잘 모릅니다.
나는 또한 위에서 언급 한 오류 처리가 언급 된 것처럼 행동해야하는 많은 이벤트가 있으며 나는 어떻게 든 error_on_all_events를 사용할 수 있음을 알았다. 그러나 그것에 관한 문서는 찾지 못했습니까?
의견이 있으십니까? 감사!
편집 : 혼동을 없애기 위해 일부 작은 부품이 변경되었습니다.
감사합니다, 나는 완전히 잘못 아니에요 듣고 큰. 내 질문에 일부 부분도 지웠다. 혼란에 빠져서 미안하다. error_on_all_events를 사용하는 방법의 예를 보여줄 수도 있습니까? 대단히 감사합니다! thow_exception 매개 변수는 데모 용도로만 사용되었습니다 .. :) – Lichtamberg
여러분을 환영합니다! 'error_on_all_events'는'aasm'의 다른 콜백과 같습니다. 'error_on_all_events' 블록을'aasm' 블록 안에 정의 할 수 있습니다 (예를 들어 답변이 업데이트되었습니다). – mmichael