Rails has_one relationship

时间:2018-06-14 11:33:23

标签: ruby-on-rails has-one

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

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

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

2 个答案:

答案 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。如果需要使其唯一,则需要指定该约束。如果你需要确保每个人都有老板,你也需要指明一下。