Ruby on rails 在Rails+中查找或创建重复记录;蒙哥德
我有一个对象Ruby on rails 在Rails+中查找或创建重复记录;蒙哥德,ruby-on-rails,ruby-on-rails-3,mongodb,mongoid,Ruby On Rails,Ruby On Rails 3,Mongodb,Mongoid,我有一个对象消息,它仅由此行创建: Message.find_or_create_by(:api_id => params['message_id']) 理论上,我不应该有两条具有相同api_id的消息,但是。。。我愿意。当两个请求同时发生时,两个请求都调用该行 其他人发布了与ActiveRecord相同的问题:但我使用的是Mongoid 如何解决此问题?使用upserts找到了解决方案: Message.collection.update({:api_id => params['
消息
,它仅由此行创建:
Message.find_or_create_by(:api_id => params['message_id'])
理论上,我不应该有两条具有相同api_id的消息,但是。。。我愿意。当两个请求同时发生时,两个请求都调用该行
其他人发布了与ActiveRecord相同的问题:但我使用的是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
感觉有点凌乱,但有效。还有其他选择。AR做错了是一回事。Mongoid是在MongoDB之上专门设计的,应该使用完美的原子升级。没有直接使用驱动程序的选项?我不得不使用相同的解决方案。值得注意的是,初始化/创建/保存此文档时不会调用回调。