【问题标题】:Duplicate Records created by find_or_create In Rails+Mongoid在 Rails+Mongoid 中 find_or_create 创建的重复记录
【发布时间】:2011-09-20 16:11:06
【问题描述】:

我有一个对象Message,它只由这一行创建:

Message.find_or_create_by(:api_id => params['message_id'])

理论上,我不应该有两条具有相同 api_id 的消息,但是……我有。当两个请求同时发生并且都调用该行时,就会发生这种情况。

其他人发布了与 ActiveRecord 相同的问题:Duplicate Records created by find_or_create_by_ 但我使用的是 Mongoid。

我该如何解决这个问题?

【问题讨论】:

  • AR 做错是一回事。 Mongoid 是在 MongoDB 之上专门设计的,应该为此使用完美的原子 upserts。没有选择直接使用驱动程序?

标签: ruby-on-rails ruby-on-rails-3 mongodb mongoid


【解决方案1】:

使用 upserts 找到了解决方案:

Message.collection.update({:api_id => params['message_id']}, {'$set' => {:api_id => params['message_id']}}, :upsert => true)
@message = Message.where(:api_id => params['message_id']).first

感觉有点乱,但可以。仍然对替代品持开放态度。

【讨论】:

  • 我不得不使用同样的解决方案。值得注意的是,当此文档被初始化/创建/保存时,不会调用回调
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-12
  • 1970-01-01
  • 2013-05-31
  • 1970-01-01
  • 2016-03-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多