这个问题 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(使用前将#替换为@)