This question讨论了验证两个表的唯一性,并且接受的答案提到“这样的代码级别唯一约束在并行请求中的竞争条件下可能不起作用,除非这可以在数据库级别完成。”
也就是说,如果您有一个User
和一个Organization
并且要在两者之间验证唯一的slug
,那么如何在数据库级别确保这一点,或者以其他方式避免出现竞争条件的可能性?
我唯一的想法是创建一个像Slug
这样的相关记录,belongs_to
两个模型。您可以将这些模型的create
和update
包装在您也创建关联记录的事务中。除非确保存在额外的唯一性约束,否则此记录不会用于任何事情,如果违反了该错误,则会在数据库级别引发错误。
有更好的方法,还是我走在正确的道路上?
答案 0 :(得分:2)
我会使用类似的东西,但添加数据库约束以确保这些slu的“唯一性”。所以,总结一下:
print()
:Slug
belongs_to :sluggable, polymorphic: true