当我们在Rails中定义两个表之间的关系时,我们通常会喜欢
rails g migration AddUserToTask user:belongs_to
has_many :users
之类的关系类型然后,仅添加模型定义关系的第二步,该怎么办?
行得通吗?
如果是,为什么我们通常要执行步骤1?
=====
然后,在以下情况下会发生什么?
只需创建关联所必需的列(例如user_id)。而且此列在sql级别上没有FK约束。
并在模型上添加一行以定义诸如has_many :users
之类的关系类型,并在步骤1中创建列名
这意味着,需要关联的列,但没有FK约束。
答案 0 :(得分:0)
第一步是在数据库上创建关系,因此需要在user_id
表中添加列tasks
。
此后,当您保存任务时,例如
> task = Task.first
> task.user = User.first
> task.save
它将用户ID保存在user_id
表的tasks
字段中。
如果没有此列,则关联has_many
将不起作用,因为数据库中用户与任务之间没有链接。
此外,在您的示例迁移中,正确的关联应该是将has_many :tasks
添加到User
模型中,并在belongs_to :user
模型中添加Task
。
答案 1 :(得分:0)
实际上,您可以仅通过在表上创建FK(迁移)来设置关系,并手动管理所有查询内容(设置user_id
,通过user_id
进行检索等)
运行迁移后,当您在依赖Rails进行所有艰苦工作的模型上设置关联。
因此,您可以没有模型关联,但是没有表FK也可以。