在 Rails 中验证两个表的唯一性时如何避免竞争条件

2024-01-29

这个问题 https://stackoverflow.com/questions/21012826/validating-uniqueness-across-two-tables讨论验证两个表之间的唯一性,并且接受的答案提到“这种代码级唯一约束可能无法在并行请求之间的竞争条件下工作,除非可以在数据库级别完成此操作。”

也就是说,如果你有一个User and an Organization并验证一个独特的slug在这两者中,如何在数据库级别确保这一点,或者避免出现竞争条件的可能性?

我唯一的想法是创建一个相关记录,例如Slug, which belongs_to两种型号。你会包裹create and update您还可以在事务中创建这些模型的关联记录。除了确保额外的唯一性约束并在违反该约束时在数据库级别引发错误之外,此记录不用于任何其他用途。

有更好的方法还是我走在正确的道路上?


我会选择类似的东西,但添加数据库约束以确保这些段的“唯一性”。所以,总而言之:

  • 多态模型Slug: belongs_to :sluggable, polymorphic: true
  • 用于控制关联模型的创建(或回滚)的事务
  • DB层的约束以确保唯一性:add_index :slugs, :slug, unique: true
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Rails 中验证两个表的唯一性时如何避免竞争条件 的相关文章

  • 阻止表单 POSTing,直到 javascript 代码得到满足

    每当我点击提交按钮时它就会触发alert empty username 但直接引导我去checklogin php 我怎样才能避免这种情况并让它保留在页面上 除非该字段不为空 function RequiredFields var user
  • 通过使用 Minitest 的 Rails,如何设置 RuboCop 在每次使用 rake 运行测试时自动运行?

    当我运行以下命令时 我想要RuboCop https github com bbatsov rubocop在测试运行之前检查我指定的应用程序目录 bundle exec rake test 我添加了以下任务lib tasks test ra
  • 域驱动设计中输入验证应该放在哪里?

    我想知道我们到底应该在哪里放置输入验证 想象一下 API 调用发送输入以应用用户的空闲时间 在服务层注入验证类并在服务内部调用验证方法是否正确 或者最好将其放在基础设施层甚至领域模型中 我只是想看看在域驱动设计方法中实现 API 输入验证的
  • Memcachier 达到缓存限制时 Heroku 请求超时

    我使用 Memcachier Dalli 作为客户端 将 Rails 应用程序部署到 Heroku 我正在使用免费插件 提供 25 MB 缓存 我们开始收到来自heroku的请求超时 经过调试 我们发现手动刷新Memcachier解决了问题
  • 如何使用自定义 ValidationAttribute 来确保两个属性匹配?

    我们使用 xVal 和标准DataAnnotationsValidationRunner描述here http blog stevensanderson com 2009 01 10 xval a validation framework
  • 数据库分片和 Rails

    在 Rails 中处理分片数据库的最佳方法是什么 分片应该在应用层 活动记录层 数据库驱动层 代理层还是其他层处理 各自的优点和缺点是什么 FiveRuns 有一个名为的 gem数据结构 https github com bpot data
  • 使用复选框过滤列表

    我有一个电影列表及其评级 在我的页面顶部 我有一个表单 其中提供了一个复选框列表 其中显示了每个可用的评级 G PG 13 等 一旦用户单击复选框并点击提交 我只想显示所选的电影 在我的索引方法中 我有一个名为的实例变量 filtered
  • 如何正确清理来自 AngularJS 控制器的无效输入的表单?

    我有一个 AngularJS 表单 其中包含 除其他字段之外 类型之一url 后者很重要 因为这会强制相应的输入成为有效的 URL 在某些条件下 例如 要关闭具有此类表单的模式对话框 我想以编程方式清除该表单 为此 我实现了方法reset基
  • Laravel 5 中的自定义验证器

    我正在将 Laravel 应用程序从 4 升级到 5 但是 我有一个自定义验证器 但无法运行 在L4中 我做了一个验证器 php文件并将其包含在全局 php using require app path validators php 我尝试
  • Rails Capistrano 3 - 如何将 production.log 文件共享到 Capistrano 的共享文件夹中?

    我正在使用 Capistrano 3 与我的 Rails 应用程序一起部署 问题是 每次我将应用程序部署到服务器时 log development log 文件都会重置 我听说可以将 production log 文件放入共享文件夹中并在每
  • 自定义通用 Rails 错误消息

    我们的 Rails 应用程序被设计为链接到多个客户端数据库的单个代码库 根据子域 应用程序确定要连接到哪个数据库 我们使用液体模板为每个客户定制演示文稿 我们无法为每个客户定制通用的 我们很抱歉 出了点问题 消息 谁能推荐一种方法让我们能够
  • 很好地处理数据库约束错误

    再一次 它应该很简单 我的任务是在我们的应用程序的域对象中放置一个具有唯一约束的特定字段 这本身并不是一个很大的挑战 我刚刚做了以下事情 public class Location more fields Column unique tru
  • 通过 ESI:include 设置 Cookie,如何?

    我正在尝试使用 esi 在我的网站上创建忍者缓存 这个想法是 该网站大部分是静态的 我只需要在用户是否登录时做一些花哨的事情 所以我试图在页面A上放置一个 并在页面B的应用程序中设置触发器 这样我就可以将页面 A 缓存在 varnish 上
  • Rails 3.1 和图像资源

    我已将管理主题的所有图像放入名为 admin 的文件夹内的资产文件夹中 然后我像平常一样链接到它 Ruby image tag admin file jpg CSS logo background url assets images adm
  • 如何为名称为数组的 jquery 表单验证插件创建规则?

    有谁知道当您有一个数组的名称属性时如何为 jquery 表单验证插件创建规则 eg
  • 角度 2 通道数组到自定义验证器(模板驱动形式)

    我需要将一个对象数组传递给 a2 自定义验证器 然后我想根据该数组中的记录验证模板驱动表单字段的值 但是我无法检索验证器内的对象 我唯一能看到的是它的名称作为字符串 如有任何帮助 我们将不胜感激
  • Capybara with Rails:如何仅查找不可见元素

    我正在 Rails 项目 Rails 5 2 0 中使用 Capybara capybara 3 1 0 进行系统测试 确保元素不可见的方法是什么 我当时用的是visible false选项 直到我发现它也匹配可见元素 例如我使用 find
  • yup.js 验证数字字段大于同级字段,或者可以为空

    我正在使用 Yup js 来验证一些表单字段 我有两个整数字段 Year Built Year Renovated Year Built是必填字段 Year Renovated is not 不过 装修年份可以留空如果有一个值它应该大于建造
  • 使用 php/regex 验证美国电话号码

    EDIT 我混合并修改了下面给出的两个答案 以形成完整的功能 现在它可以完成我想要的功能 然后是一些 所以我想我会将其发布在这里 以防其他人来寻找同样的东西 Function to analyze string against many p
  • 用于验证目的的动态查找方法

    我正在使用 Ruby on Rails 3 0 7 我想在运行时查找一些记录以进行验证 但为该查找方法传递 设置一个值 也就是说 在我的班级中 我有以下内容 class Group lt lt ActiveRecord Base valid

随机推荐

  • 为什么 foreach %dopar% 每增加一个节点就会变慢?

    我编写了一个简单的矩阵乘法来测试网络的多线程 并行化功能 我注意到计算速度比预期慢得多 The Test很简单 乘以 2 个矩阵 4096x4096 并返回计算时间 矩阵和结果都不被存储 计算时间并非微不足道 50 90 秒 具体取决于您的
  • 如何向枚举添加多个属性?

    我有一个名为的 SQL 查找表客户信用解决计划行动类型我想转换为enum questions tagged enum in c questions tagged c 23 非常基本的要求 对吧 正确的 我的桌子 现在enum questio
  • co_await 似乎不是最理想的?

    我有一个异步函数 void async foo A a B b C c function
  • IE11框架通知栏保存按钮

    在装有 MS Excel 2010 和 IE11 的 64 位系统上 我使用此代码自动从网站下载过程 hWnd FindWindowEx IE hWnd 0 Frame Notification Bar vbNullString If hW
  • 如何将文件读入整数数组

    在我的应用程序文档文件夹中 我有一个文件 我试图将其逐字节读入数组UInt8其中每个元素代表一个字节 我该怎么做呢 该文件恰好名为 Q1 dat 这是我不成功的尝试 func readArray gt Int if let arrayPat
  • 使用 angular2 显示/隐藏密码文本

    我想根据用户点击显示 隐藏密码文本 但我收到以下错误消息 export class App password secret show false ContentChild ShowHideInput input ShowHideInput
  • 同一手臂上不同类型的模式匹配

    我想知道当两个或多个不同的枚举类型具有相同的数据成员或相同的函数时 是否有一种方法可以简化以下模式匹配臂 如果没有 最好解释一下原因 UPDATE 根据要求提供我想要的更准确的示例 请原谅我将数据成员访问与函数混淆 struct Point
  • Hibernate 验证器:@Email 接受ask@stackoverflow 为有效吗?

    我正在使用 Email用于验证电子邮件地址的注释 我遇到的问题是它接受诸如ask stackoverflow作为有效的电子邮件地址 我想这是因为他们想支持 Intranet 地址 但我似乎找不到标志 所以它确实检查扩展名 我真的需要切换到
  • 将 ListView 绑定到 ListProperty

    在tornadoFX中是否可以将ListView绑定到ListProperty 我有一个如下所示的 ViewModel class MyVm ItemViewModel
  • 使用带有 nginx 的 React 路由器应用程序获取 404 [重复]

    这个问题在这里已经有答案了 我有一个反应前端应用程序 它使用反应路由器来创建不同的路线 在开发服务器上它工作正常 但是当我构建项目时 它给我 404 同时直接使用不同的路由访问它 网站完美打开xyz net 当我尝试使用以下命令访问它时 它
  • 使用 ssh 访问存储库

    昨天我发现了 git 这样的东西的存在 我需要使用 ssh 访问远程存储库 我使用了命令 git clone email protected cdn cgi l email protection email protected cdn cg
  • 用于创建事件处理程序存根的 Visual Studio 键盘快捷键

    当您在设计视图中编辑简单页面时 只需双击相关事件即可在大多数组件上添加事件 这将完成绑定并在代码隐藏中为您生成函数声明 在页面复杂的大型项目中 设计视图可能会非常慢 有没有一种方法可以直接从代码快速生成代码隐藏存根 aspx source
  • linq Last() 如何确定最后一项?

    我不明白 Current 如何可以为 null 而 LINQ 函数 Last 可以返回一个对象 我认为 Last 使用 GetEnumerator 并一直持续到 current null 并返回对象 然而 正如您所看到的 第一个 GetEn
  • 如果值匹配,则自动比较 2 个 csv 文件的值,将第二个 csv 读入 DataFrame

    我已将 Excel 导入到数据框中 它看起来像这样 然后我使用代码根据 tx id 对这些数据进行分组 并使用 tx id 的名称创建单独的 csv 这给了我这样的数据 3e6737ae c3af 4d19 a645 d17fc73dbb7
  • Java 基准测试 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我们正在使用 perlbench pybench 和 php bench 等标准基准测试工具对 Per
  • 从 commons.lang 迁移 StringEscapeUtils.escapeSql

    我已经开始将 commons lang 2 迁移到 commons lang3 根据https commons apache org proper commons lang article3 0 html https commons apa
  • XSLT 复制除 1 个元素之外的所有节点

  • 在 Coq 中使用依赖类型(安全第 n 个函数)

    我正在尝试学习 Coq 但我发现很难从我读到的内容中实现飞跃软件基础 and 依赖类型的认证编程到我自己的用例 特别是 我想我应该尝试制作一个经过验证的版本nth列表上的函数 我设法写了这个 Require Import Arith Req
  • 在 macOS 上安装 Homebrew

    根据 Homebrew 网站 要安装它 我需要输入 brew install wget 我收到一条错误消息 bash brew command not found Found 这个答案 https stackoverflow com que
  • 在 Rails 中验证两个表的唯一性时如何避免竞争条件

    这个问题 https stackoverflow com questions 21012826 validating uniqueness across two tables讨论验证两个表之间的唯一性 并且接受的答案提到 这种代码级唯一约束