首页 > 解决方案 > Rails:了解唯一性范围?

问题描述

这可能是一个愚蠢的问题,但我想确保我了解具有唯一性模型约束的“范围”字段。

我正在按照本指南进行操作:https ://dankim.io/mutual-friendship-rails/以了解在 Rails 中处理“朋友”关联。一方面,它谈到了制定唯一性约束:

validates :friend, presence: true, uniqueness: { scope: :user }(这在friendship模型中。

所以这是说该friend_id字段不应该与同一user_id字段重复,对吗?

这不也可以作为: validates :user, presence: true, uniqueness: { scope: :friend }

说用户不应该多次user_id出现重复的friend_id. 还是我误解了scope这里的工作原理?

谢谢!

标签: ruby-on-rails

解决方案


你说的对。范围是一种奇特的说法,只允许一个双重(用户,朋友)

如果您在数据库上设置索引(这是避免具有唯一性验证的竞争条件所必需的),您将执行完全相同的操作:

add_index :friendships, [:user_id, :friend_id], unique: true

推荐阅读