由find_or_create在Rails + Mongoid中创建的重复记录

时间:2011-09-20 16:11:06

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

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

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

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

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

我该如何解决这个问题?

1 个答案:

答案 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

感觉有点乱,但有效。仍然愿意接受替代方案。