Ruby on rails aasm:事件后回调中的错误取消事件

Ruby on rails aasm:事件后回调中的错误取消事件,ruby-on-rails,ruby,callback,aasm,Ruby On Rails,Ruby,Callback,Aasm,我有一个aasm事件,看起来像这样: event :close do transitions from: :normal, to: :closed after do action_1(...) action_2(...) end end 现在,我注意到,当我叫close时!action2出现错误,事件未保存在db中。我想事情的顺序是 1.实例的转换 2.回调后 3.拯救 除了在“after”块级别下捕获错误外,在我可以使用的“save”之后是否会触发回调?原因是aa

我有一个aasm事件,看起来像这样:

event :close do
  transitions from: :normal, to: :closed
  after do
    action_1(...)
    action_2(...)
  end
end
现在,我注意到,当我叫close时!action2出现错误,事件未保存在db中。我想事情的顺序是 1.实例的转换 2.回调后 3.拯救


除了在“after”块级别下捕获错误外,在我可以使用的“save”之后是否会触发回调?

原因是aasm将save包装到事务中,该事务在异常时回滚

目前没有可供您使用的回调,但我可以想象

event :close do
  transitions from: :normal, to: :closed
  assure do
    action_1(...)
    action_2(...)
  end
end
其中,即使出现异常,也将执行
操作1
操作2


请向添加一个问题,我会处理。

原因是aasm将保存包装到事务中,该事务在异常时回滚

目前没有可供您使用的回调,但我可以想象

event :close do
  transitions from: :normal, to: :closed
  assure do
    action_1(...)
    action_2(...)
  end
end
其中,即使出现异常,也将执行
操作1
操作2


请在中添加一个问题,我会处理。

是否可以在应用程序中使用Delayed::Job或类似的工具?这将允许您将操作_2更改为排队操作_2(应该总是成功)。实际上这是一个好主意(事实上我无论如何都要将此操作排队),我会记住这一点。。谢谢:)在您的应用程序中可以使用Delayed::Job或类似的东西吗?这将允许您将操作_2更改为排队操作_2(应该总是成功)。实际上这是一个好主意(事实上我无论如何都要将此操作排队),我会记住这一点。。谢谢你的帮助。事实是,如果我只需要担心取消的活动,那也没什么大不了的。这里真正的问题是action1已经完成(比如通知用户更改),然后由于action2事件被取消,action1(用户通知)不再相关。感谢您的帮助。事实是,如果我只需要担心取消的活动,那也没什么大不了的。这里真正的问题是action1已经完成(比如通知用户更改),然后由于action2事件被取消,action1(用户通知)不再相关。。