我有一个对象 Message
仅由该行创建:
Message.find_or_create_by(:api_id => params['message_id'])
理论上,我不应该有两条具有相同 api_id 的消息,但是……我有。当两个请求同时发生并且都调用该行时,就会发生这种情况。
其他人发布了与 ActiveRecord 相同的问题:Duplicate Records created by find_or_create_by_但我正在使用 Mongoid。
我该如何解决这个问题?
最佳答案
使用 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
感觉有点乱,但可以。仍然对替代品持开放态度。
关于ruby-on-rails - 在 Rails+Mongoid 中 find_or_create 创建的重复记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7488334/