【问题标题】:What is the best way to halt a transition with AASM用 AASM 停止过渡的最佳方法是什么
【发布时间】:2009-03-11 15:46:43
【问题描述】:

当在成功调用方法或进入状态转换阶段抛出错误时,捕获此错误并确保状态恢复到先前状态的最佳方法是什么。

我正在使用 AASM gem。

【问题讨论】:

    标签: ruby-on-rails ruby aasm


    【解决方案1】:

    如何使用 :guard 选项来确保可以执行转换?如果guard 方法返回false,则根本不执行转换。所以,我会先检查一下这个转换的每个条件是否都满足了 guard 方法。

    【讨论】:

    • 我不知道这个问题的答案,但对我来说使用警卫似乎不是一个好选择,因为它们会阻止你使用model_instance.may_event_name?。这是因为may_event_name? 将运行保护代码以检查是否可以进行转换,如果这些检查依赖于在事件触发后运行的代码,则它们还没有运行并且保护将失败,因此返回falsemay_event_name?
    【解决方案2】:

    我没有使用过这个插件,但是阅读了代码,除非我弄错了,似乎没有任何机制可以传达这些回调中的任何一个都失败了。

    对于success 回调,这对我来说是完全有意义的,因为只有在转换实际发生时才调用它,此时恢复为时已晚。如果您希望在 success 回调中引发异常以防止转换,那么代码可能应该进入转换本身而不是 success 回调......?或者也许你需要一个额外的状态......?

    关于enter 回调,guard 回调不是更合适吗...?如果过渡不应该继续,您可以返回 false。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-06
      • 1970-01-01
      • 2011-02-20
      • 1970-01-01
      • 2012-01-01
      • 1970-01-01
      • 2010-10-20
      相关资源
      最近更新 更多