我想知道为什么当我有1:1的关系(has_one
,belongs_to
)时,我可以通过控制台插入重复的ID。
例如,有两个子对象在外键中具有相同的父对象。
默认情况下,外键是否必须是唯一的,或者我应该包含unique: true
之类的内容?
答案 0 :(得分:3)
这不是默认设置,但实施起来并不困难。首先,创建一个迁移以在db:
中添加唯一性约束从终端:
rails g migration add_uniqueness_to_your_table_column
在生成的文件中:
add_index :table_name, :column, unique: true
More here如果您有兴趣,虽然关键是索引用于检查唯一性。
然后,在运行之前,确保db中没有当前重复项(否则会失败):
rails db:migrate
最后,您还可以使用以下方法在模型级别强制执行此操作:
# your_model.rb
validates :column, uniqueness: true
希望有所帮助 - 如果您对此有任何疑问或意见,请与我联系。
答案 1 :(得分:0)
默认情况下,外键不是唯一的。让我们看一个实际示例,其中您有一个用户实体类型,用户可能通过外键拥有一个boss。默认情况下,可能有多个用户拥有相同的boss。如果需要使其唯一,则需要指定该约束。如果你需要确保每个人都有老板,你也需要指明一下。