Rails has_one 关系

Rails has_one relationship

我想知道为什么当我有 1:1 关系(has_onebelongs_to)时,我可以通过控制台插入重复的 ID。

例如,有两个子对象在外键中具有相同的父对象。

默认情况下外键不是必须是唯一的,还是我应该包含 unique: true 之类的内容?

默认情况下,外键不是唯一的。让我们看一个实际的例子,你有一个用户的实体类型,一个用户可能通过外键有一个老板。默认情况下,可能有多个用户拥有相同的老板。如果需要使其唯一,则需要指定该约束。如果你需要确保每个人都有老板,你也需要指定。

这不是默认设置,但实现起来并不困难。首先,创建迁移以在数据库中添加唯一性约束:

来自终端:

rails g migration add_uniqueness_to_your_table_column

在生成的文件中:

add_index :table_name, :column, unique: true

如果您有兴趣,尽管关键是索引用于检查唯一性。

然后,在 运行:

之前确保数据库中没有当前重复项(否则会失败)
rails db:migrate

最后,您还可以在模型级别执行此操作,使用:

# your_model.rb
validates :column, uniqueness: true

希望对您有所帮助 - 如果您对此有任何问题或意见,请告诉我。