活动记录 - destroy_all并在事务内创建

时间:2013-10-01 21:40:37

标签: mysql ruby-on-rails activerecord transactions

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

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

期望在模型下始终有两个且只有两个事件对象。

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

是否有共同的模式来做这种事情?

1 个答案:

答案 0 :(得分:2)

在删除和创建活动之前,您必须使用pessimistic locking来锁定模型。