在没有迁移的模型上定义关系,这会增加 FK 约束?
Define relation at model without migration which adds FK constraint?
当我们在 Rails 定义两个表之间的关系时,我们通常会这样做
- 运行 用于生成迁移文件的命令,如
rails g migration AddUserToTask user:belongs_to
- 并在模型中添加一行来定义关系类型,例如
has_many :users
那么,只做第 2 步怎么样,它只是在模型中添加用于定义关系的行?
有效吗?
如果是这样,为什么我们通常做step1?
=====
而且,在下面的情况下会发生什么?
只是创建关联所必需的列(如user_id)。并且此列在 sql 级别没有 FK 约束。
并在模型中添加行以定义关系类型,例如 has_many :users
与在步骤 1 中创建的列名称
也就是说,有需要关联的列,但是没有外键约束。
第一步是在数据库中创建关系,因此它是在 tasks
table.
中添加列 user_id
在此之后,当您保存任务时,例如
> task = Task.first
> task.user = User.first
> task.save
它将用户的 ID 保存在 tasks
table 的 user_id
字段中。
如果没有此列,关联 has_many
将不起作用,因为数据库中的用户和任务之间没有 link。
此外,在您的示例迁移中,正确的关联应该是将 has_many :tasks
添加到 User
模型,并在 Task
模型中添加 belongs_to :user
。
实际上,您可以通过在 table(迁移)上创建 FK 来设置关系,并手动管理所有查询内容(设置 user_id
,通过 [=10 检索=], 等等).
在 运行 迁移之后,您在依赖 Rails 完成所有艰苦工作的模型上设置关联。
所以,你可以没有模型协会,但不能没有 table FK。
当我们在 Rails 定义两个表之间的关系时,我们通常会这样做
- 运行 用于生成迁移文件的命令,如
rails g migration AddUserToTask user:belongs_to
- 并在模型中添加一行来定义关系类型,例如
has_many :users
那么,只做第 2 步怎么样,它只是在模型中添加用于定义关系的行?
有效吗?
如果是这样,为什么我们通常做step1?
=====
而且,在下面的情况下会发生什么?
只是创建关联所必需的列(如user_id)。并且此列在 sql 级别没有 FK 约束。
并在模型中添加行以定义关系类型,例如
has_many :users
与在步骤 1 中创建的列名称
也就是说,有需要关联的列,但是没有外键约束。
第一步是在数据库中创建关系,因此它是在 tasks
table.
user_id
在此之后,当您保存任务时,例如
> task = Task.first
> task.user = User.first
> task.save
它将用户的 ID 保存在 tasks
table 的 user_id
字段中。
如果没有此列,关联 has_many
将不起作用,因为数据库中的用户和任务之间没有 link。
此外,在您的示例迁移中,正确的关联应该是将 has_many :tasks
添加到 User
模型,并在 Task
模型中添加 belongs_to :user
。
实际上,您可以通过在 table(迁移)上创建 FK 来设置关系,并手动管理所有查询内容(设置 user_id
,通过 [=10 检索=], 等等).
在 运行 迁移之后,您在依赖 Rails 完成所有艰苦工作的模型上设置关联。
所以,你可以没有模型协会,但不能没有 table FK。