没有索引的关联

问题描述 投票:0回答:1

假设我有两个模型之间的一对一关系。我在各自的类中创建关系

has_one
belongs_to
。在迁移之前,我使用
t.references :table_name, foreign_key:true
连接两个表。 Rails 会强制执行一对一关系吗?我能够在另一个表中多次链接同一行而没有任何错误。

只有当我回滚并添加

index:{unique:true}
时,它开始说您已经链接了该行,从而保持了一对一的关系。所以,问题是创建关联有什么用,如果 Rails 不能执行它?

我知道我遗漏了一些东西,但我找不到它。

ruby-on-rails database activerecord model-associations
1个回答
0
投票

你在这里得出了一些非常离谱的结论。

关联在 Rails 中的作用不是强制数据的一致性。因为这是 任何应用程序都不可能真正做到的。加强数据的一致性最终是数据库的责任。

关联是围绕数据库表之间关系的面向对象的抽象。它们使查询相关数据和加载模型及其关联变得更加容易。它也是一个非常漏洞百出的抽象,对象-关系阻抗不匹配问题无处不在——但这并不意味着它在正确使用时不是一个非常有用的工具。

belongs_to
的情况下,它实际上只能指向一条记录,因为它加入了存储在 this 模型表中的外部 ID。

has_one
不保证另一端实际上有一个可能的记录。它只是加入另一个表并对查询施加限制,以便您只能获得一条记录。如果您在另一个表上有多个匹配的记录,您将按照获取记录的顺序获得第一个。

© www.soinside.com 2019 - 2024. All rights reserved.