我目前正在上课,基本上是在做以下事情:
- 模型被创建
- 获取数据(事件“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 - 但没有找到任何关于它的文档?
有什么想法吗?谢谢!
编辑:更改了一些小部分以消除混乱。