ruby-on-rails - 在 Rails+Mongoid 中 find_or_create 创建的重复记录

标签 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。

我该如何解决这个问题?

最佳答案

使用 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/

相关文章:

node.js - 试图从 mongoose 获取收藏列表

javascript - 返回数据到index.js Node express

ruby-on-rails - rswag gem 无法识别我在 rspec 中的参数

ruby-on-rails - Ruby On Rails 对同一操作的不同 View (基于用户的角色)

ruby-on-rails - Rails 新形式 -> 无

ruby-on-rails - 如何查找 ActiveRecord::Base.update 的文档?

ruby-on-rails - 寻求构建电子商务 Rails 应用程序的指导

ruby-on-rails - 这些天有哪些值得投入时间和精力的 Web 框架

html - 我如何在 Rails 3 中创建指向文本和图像的链接?

javascript - 如何使用 MongoDB/Meteor 处理 "relations"