Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在Rails+中查找或创建重复记录;蒙哥德_Ruby On Rails_Ruby On Rails 3_Mongodb_Mongoid - Fatal编程技术网

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之上专门设计的,应该使用完美的原子升级。没有直接使用驱动程序的选项?我不得不使用相同的解决方案。值得注意的是,初始化/创建/保存此文档时不会调用回调。