【问题标题】:active record - destroy_all and create inside a transaction活动记录 - destroy_all 并在事务中创建
【发布时间】:2013-10-01 21:40:36
【问题描述】:

下面是我们使用rails 3.1.6在mysql 5.5上执行的代码

Model.transaction do
  model.events.destroy_all
  2.times { model.events.create!(some_body) }
end

期望模型下总是有两个且只有两个事件对象。

当我在两个线程上运行此代码时,我经常会得到四个事件对象。我希望两个线程都能序列化事务块内的代码执行。显然交易不是这样工作的。

有没有一种常见的模式来做这种事情?

【问题讨论】:

    标签: mysql ruby-on-rails activerecord transactions


    【解决方案1】:

    在删除和创建事件之前,您必须使用 pessimistic locking 锁定您的模型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-10
      • 1970-01-01
      • 1970-01-01
      • 2022-07-26
      • 2017-06-23
      • 1970-01-01
      • 2015-02-27
      相关资源
      最近更新 更多