gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 05:24:42 28 4
gpt4 key购买 nike

This question讨论了跨两个表验证唯一性,接受的答案提到“这种代码级别的唯一约束可能无法在并行请求之间的竞争条件下工作,除非可以在数据库级别以某种方式完成。”

也就是说,如果您有一个 User 和一个 Organization 并且要在两者之间验证唯一的 slug,您如何确保这一点在数据库级别,或者以其他方式避免出现竞争条件的可能性?

我唯一的想法是创建一个相关记录,如 Slugbelongs_to 这两个模型。您可以将这些模型的 createupdate 包装在您还创建关联记录的事务中。除了确保额外的唯一性约束并在违反时在数据库级别引发错误外,此记录不用于任何其他用途。

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

最佳答案

我会采用类似的方法,但会添加数据库约束以确保这些 slug 的“唯一性”。所以,总结一下:

  • 一个多态模型Slug:belongs_to :sluggable, polymorphic: true
  • 控制关联模型创建(或回滚)的事务
  • 数据库层的约束以确保唯一性:add_index :slugs, :slug, unique: true

关于ruby-on-rails - 在 Rails 中验证跨两个表的唯一性时如何避免竞争条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34049308/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com