我有一个对象Message
,它只是由这一行创建的:
Message.find_or_create_by(:api_id => params['message_id'])
理论上,我永远不应该有两条带有相同api_id的消息,但是......我知道。当两个请求同时发生并且都调用该行时,就会发生这种情况。
其他人在ActiveRecord上发布了同样的问题:Duplicate Records created by find_or_create_by_但我使用的是Mongoid。
我该如何解决这个问题?
答案 0 :(得分:8)
使用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
感觉有点乱,但有效。仍然愿意接受替代方案。