创建回调后什么时候可以回滚?

When Can After Create Call Back Rollback?

提问人:Anand Shrivastava 提问时间:11/26/2022 最后编辑:Anand Shrivastava 更新时间:11/27/2022 访问量:59

问:

  • 用例是我们有一个lms_status模型,并且在模型中具有带有 if 条件after_create回调。

  • 我发现,如果条件为真,则after_create中的代码正确执行,但在lms_statuses表中没有创建条目。

  • 似乎在创建后它也从表中删除了。

    class LmsStatus
    
     after_create :enqueue_order_item, if: ->{ status == 6 }
    
     def enqueue_order_item
      //code working fine
     end   
    
    end
    
  • 对于某些lms_status对象/条目,它并不总是发生。

  • after_create回调中执行代码后的回调有没有可能回滚?如果是,那么对于这些lms_statuses,它正在恢复我不想执行回调代码。我该如何预防?

mysql ruby-on-rails ruby 创建后 回调

评论

0赞 spickermann 11/27/2022
我不确定我是否理解你的问题以及你试图实现的目标。但是记录的创建和创建后的回调在同一个外部事务中运行。该事务中的每个步骤都可能触发回滚。如果触发了此类回滚,则该回调的创建以及所做的修改将被还原。这有帮助吗?或者你能详细说明你面临的问题吗?
0赞 Anand Shrivastava 11/27/2022
问题是after_create代码应该在创建lms_status对象后执行,但在我的情况下after_create代码已经执行,但我没有找到任何lms_status。例如after_create假设为 #lms_status_1 执行了代码,但在表中没有条目 #lms_status_1...@spickermann
2赞 max 11/27/2022
通过使用,你使回调将始终运行,因为在 Ruby 中除了 和 之外的所有内容都是真实的。Rails 不会对字符串 AFAIK 进行评估。你想使用一个lamda,或者更好的是定义一个枚举,这样你就可以调用类似的东西。guides.rubyonrails.org/......if: 'status==6'nilfalseif: ->{ status == 6 }if: :draft?
0赞 Anand Shrivastava 11/27/2022
我更新了if条件....这只是举个例子......对不起,语法不正确...问题是另一回事@max
2赞 max 11/27/2022
我认为如果没有一个例子来证明你所面临的整个问题,任何人都无法真正帮助你。以及发生的事情与预期结果的例子。

答: 暂无答案