Rails 中的竞争条件 first_or_create

2024-02-23

我正在尝试强制表字段之一中值的唯一性。改变桌子不是一个选择。我需要使用 ActiveRecord 有条件地将一行插入表中,但我担心同步。

Does first_or_createRails ActiveRecord 中的防止竞争条件?

这是源代码first_or_create来自 GitHub:

def first_or_create(attributes = nil, options = {}, &block)
  first || create(attributes, options, &block)
end

由于多个进程的同步问题,是否有可能导致数据库出现重复条目​​?


铁轨4的文档find_or_create_by http://api.rubyonrails.org/classes/ActiveRecord/Relation.html#method-i-find_or_create_by提供了对这种情况可能有用的提示:

请注意这个方法不是原子的,它首先运行 SELECT,如果没有结果,则尝试 INSERT。如果存在其他线程或进程,则两个调用之间存在竞争条件,并且最终可能会得到两个相似的记录。

这是否是一个问题取决于应用程序的逻辑,但在行具有 UNIQUE 约束的特定情况下,可能会引发异常,只需重试:

begin
  CreditAccount.find_or_create_by(user_id: user.id)
rescue ActiveRecord::RecordNotUnique
  retry
end

类似的错误捕获对于 Rails 3 可能很有用。(不确定是否相同ActiveRecord::RecordNotUniqueRails 3 中会抛出错误,因此您的实现可能需要有所不同。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rails 中的竞争条件 first_or_create 的相关文章

  • Rails 中的 Google freebusy api 调用无法识别参数

    我试图从我的主日历中查找所有空闲 忙碌时间 但我无法让查询识别我的参数 在我的控制器中我有 freetimes client execute api method gt service freebusy query parameters g
  • Rails 中 WHERE 子句中的 ALL 运算符

    关联关系如下图所示 InstructorStudent has many fees Fee belongs to instructor student 我想要获得在所有给定数组中具有每月详细信息的指导学生 如果其中任何一个中不存在每月详细信
  • has_many 关系中的 Active Record 对象何时保存?

    我正在使用 Rails 1 2 3 是的 我知道 并且对如何使用感到困惑has many适用于对象持久性 为了举例 我将使用它作为我的声明 class User lt ActiveRecord Base has many assignmen
  • 将实例变量传递到表单中 - Rails

    由于我对 Rails 以及如何跨模型使用变量的了解很少 这可能是一个错误 因此如果需要更多代码来回答它或者我的术语不正确 请告诉我 我很乐意更新问题 我有一个帖子供稿 我希望用户能够 喜欢 这些帖子 虽然以下代码允许 Likes 在单个帖子
  • Ruby/Rails - 如何创建类并从控制器访问它

    我一直在尝试使用一些不同的 gem 在 Rails 3 中显示谷歌地图 但遇到了一些问题 幸运的是我发现了这个https github com YouthTree bhm google maps https github com Youth
  • 如果你使用belongs_to而没有相应的has_one,会发生什么?

    我有一个核心模型Item 以及一个从自定义源 例如 RSS feed 填充它的脚本 在 feed 中 每个项目都用一个标识guid 在我的系统中 项目只有一个自动生成的id首要的关键 我想要 比方说 ItemFeedInfo那个地图guid
  • 如何将枚举作为字符串存储到rails中的数据库中

    如何在 ruby 中创建迁移 其中默认值是字符串而不是整数 我想将枚举存储到数据库中 但我不想将其存储为整数 因为这样对于另一个应用程序来说没有意义想要使用同一张桌子 我该怎么做default female 代替default 0 clas
  • Rails 生产“CSS 未预编译”

    我已经在我的 Leopard 网络服务器上使用生产环境在姊妹 Rails 3 1 应用程序上完成了此操作 所以我没想到部署这个应用程序会如此失败 我已经让 Passenger 识别出该应用程序 但我在 apache 中收到 GET miss
  • 如何从 Rails 项目中删除 gem?

    我正在尝试从我的项目中删除一个 gem 因此我进入了 gem 文件并将其注释掉 gem some gem gem gem I dont want gem another gem 然后我跑 bundle 为了检查宝石是否消失 我输入 bund
  • Ruby on Rails:有关 validates_presence_of 的问题

    我的基于 ActiveRecord 的模型中有一个关系 如下所示 belongs to foo 我的模型应该始终在其中定义 foo 才能有效 我的问题是 当使用 validates presence 时 使用哪一个是合适的 validate
  • 没有 Gem 的 Rails 分页

    我的任务是在不使用 gem 的情况下为 Rails 项目创建 前 10 个 后 10 个 最新 和 最旧 链接 在控制器中 我可以显示表中第一组 最新的 10 项 before action set page only index def
  • Rails3 has_many 关系中子项计数的范围

    尝试在rails3中做一个范围 book has many chapters 我想要 range long 返回超过 10 章的书籍 如何最好地构建这个范围 不使用计数器缓存 thanks 这应该会让你继续 class Book scope
  • 可以通过 url 发送 JSON 吗?

    我有一个 ruby 哈希 其中键是 url 值是整数 我将哈希值转换为 JSON 我想知道是否能够通过 AJAX 请求在 url 内发送 JSON 然后从 params 哈希值中提取该 JSON 另外 我将把 JSON 化的 ruby 哈希
  • rspec 测试 has_many :through 和 after_save

    我有一个 我认为 相对简单的has many through与连接表的关系 class User lt ActiveRecord Base has many user following thing relationships has ma
  • 从标记访问 json 属性 - gmaps4rails

    我正在升级到 gmaps4rails v2 我似乎无法从 javascript 访问标记 json 属性 这在我使用的先前版本 1 5 6 中有效 具体来说 内置控制器 users User all hash Gmaps4rails bui
  • Rails Structure.sql 和 schema.rb 之间有什么区别

    我知道 schema rb 文件是一个 ruby 文件 它是在运行 rake 迁移时创建和修改的 但是 Structure sql 呢 我在一些项目中看到了 schema rb 在其他项目中看到了 Structure sql 以及在一些这两
  • Rails 4 中如何使用 attr_accessible?

    attr accessible似乎不再在我的模型中工作 Rails 4 中允许批量分配的方法是什么 Rails 4 现在使用参数强 http edgeapi rubyonrails org classes ActionController
  • 如何监听第三方应用程序触发的数据库更改

    我需要将 Ruby on Rails 应用程序与第 3 方应用程序集成 该应用程序将共享一个公共 PostgreSQL 数据库 也就是说 Rails 应用程序和第 3 方应用程序将使用相同的 PG 数据库 是否可以在 Rails 应用程序中
  • Rails3 I18n:无法覆盖“1 个错误禁止保存此数据包:”

    当我在模型数据包上遇到错误时 我总是看到第一行 英语 未翻译 1 error prohibited this packet from being saved Naam Gelieve het veld Naam in te vullen 找
  • 查找日期时间与今天日期匹配的记录 - Ruby on Rails

    我有一个交易表 需要查找日期与今天的日期匹配的记录 从 Rails 控制台 我需要匹配的日期字段如下所示 我已经分配了一条记录来进行测试 ruby 1 9 2 p0 gt deal start gt Tue 10 May 2011 00 0

随机推荐

  • 错误代码 7503 - 应用程序未在我们的商店中注册

    我尝试通过 Graph API 接收呼叫信息 准确地说 我尝试运行文档中的示例 5 但我只收到以下错误 error code UnknownError message errorCode 7503 message Application i
  • nvm 在哪里存储 node.js 安装?

    我找不到通过以下方式下载和安装的 Node js 安装位置 nvm install 5 0 你知道答案吗 nvm which 5 0将为您提供该版本 Node js 的安装路径
  • 尝试评估缺失的嵌套键时,Helm 图表失败,并显示“nil 指针评估接口 {}”

    我正在编写一个 Helm 3 库图表 并希望创建一个具有默认值的 YAML 但是 当尝试设置默认值时nestedkey 不存在 Helm 失败并显示以下错误消息 nil pointer evaluating interface 假设我的 K
  • Grasshopper 语音 + Twilio 文本

    我的公司目前使用 Grasshopper 作为语音系统来接收和路由入站客户支持电话 它运行得很好 只不过现在是 2014 年 人们希望能够通过短信向我们的免费客户支持号码发送问题并获得回复 Grasshopper 不支持接收 转发短信 所以
  • 使用 TThread.Resume 有什么问题? [复制]

    这个问题在这里已经有答案了 很久以前 当我开始在 Delphi 中使用线程时 我通过调用使线程自行启动TThread Resume在其构造函数的末尾 并且仍然这样做 如下所示 constructor TMyThread Create con
  • 在两个 JPanel 对象之间发送消息

    我有一个包含 JPanel 的 Java JFrame 在该 JPanel 中 有两个独立的 JPanel 当用户单击第一个 JPanel 中的按钮时 需要向另一个 JPanel 发送一条消息 通知它单击了哪个按钮 在这样的对象之间发送消息
  • 是否可以在 TensorFlow 中仅在一次图形运行中高效地计算每个示例的梯度?

    TD DR 有没有一种方法可以在一次图形运行中以矢量化形式评估 f x1 f x2 f xn 其中 f x 是 f x 的导数 就像是 x tf placeholder tf float32 shape 100 f tf square x
  • iOS Objective C:显示 RTF 文档

    我想在视图中显示 RTF 文档 该文档将在 Microsoft Word 中开发并包含图像 使用提供的标准例程执行此操作的最佳方法是什么 我真的很想要示例代码来从包中加载 RTF 文档 亲切的问候 贾森 UIWebView 打开 rtf 文
  • Ajax 之后的 Javascript [重复]

    这个问题在这里已经有答案了 可能的重复 在 AJAX 请求之前使用 JavaScript 获取日期 https stackoverflow com questions 14416443 obtain dates with javascrip
  • 在php中的数字之间画点

    我想在我的总价值之间画点 如果我有 425000 我希望它显示为 425 000 php 中是否有一个函数可以将数字的点内爆 或者我该怎么做 Use 数字格式 http php net manual en function number f
  • 如何使用 .Net 4 进行 WCF 非 HTTP 激活?

    我有一个使用非 HTTP 激活的 Net 3 51 服务 这很好用 我想将其转换为 Net 4 在 Windows 7 中 如果您转到 控制面板 添加删除程序 打开或关闭 Windows 功能 则会出现 Microsoft NET Fram
  • 让 mmm 模式在 emacs 24 中工作

    我一直在尝试让 mmm 模式发挥作用 特别是针对 Rails 开发 我已按照安装说明进行操作 但无法进入我正在寻找的特定混合模式和特殊突出显示 最特别的是 erb 文件 这是我的 emacs 文件 custom set variables
  • 为什么在 GCC/C++ 中“pragma GCC Diagnostic Push”会弹出警告?

    pragma GCC diagnostic push it pop warning expected error warning ignored after pragma GCC diagnostic 为什么 我在 Linux 中使用 GC
  • 仅当不在生产环境中时才导入 NodeJS

    基本上 我使用 morgan 来查看开发中的日志 我有它在下面 save dev 但在我的app js I use const morgan require morgan 它在我的本地计算机上运行良好 但我只使用摩根 具体取决于NODE E
  • 将 Rails 应用程序从 Windows 连接到 SQL Server 2005

    I sadly 必须部署一个railsWindows XP 上的应用程序必须连接到微软SQL服务器2005 在网上冲浪有很多关于从 Linux 连接到 SQL Server 的内容 但找不到如何从 Windows 进行连接 基本上我遵循了以
  • 下标超出范围,VBA

    您好 我收到错误 因为下标超出范围 但我无法确定原因 错误位于标有 的行中 Function RemoveDups aryValues As Variant Dim dict As Object Set dict CreateObject
  • Grails i18n UrlMappings

    我正在处理以下问题 在我们的项目中 我们为同一网站启动了不同的国际化域名 问题在于不同语言的 UrlMappings 例如 英文 姓名联系人 contact controller static action index id contact
  • 不使用 update 语句更新表

    谁能告诉我如何在不使用更新语句的情况下更新表的某些记录 可以使用 select 语句 我不认为你可以update桌子没有update陈述
  • 我应该忽略在 Git 中提交的 launchSettings.json 文件吗?

    我找到了这个相对知名的 GitHub 存储库 他们在那里考虑了launchSettings json文件 Visual Studio 2017 用于 Net Core 项目 是ignored https github com github
  • Rails 中的竞争条件 first_or_create

    我正在尝试强制表字段之一中值的唯一性 改变桌子不是一个选择 我需要使用 ActiveRecord 有条件地将一行插入表中 但我担心同步 Does first or createRails ActiveRecord 中的防止竞争条件 这是源代