"has_many"
一位老师“有很多”学生。每个学生只有一个老师,但每个老师都有很多学生。这意味着学生上有一个外键或教师 ID 引用他们所属的老师。
"belongs_to"
学生“属于”老师。每个老师都有很多学生,但每个学生只有一个老师。同样,学生的外键引用了他们所属的老师。
让我们使用这个学生/老师的概念来解决这个问题。
教师模式
class Teacher < ActiveRecord::Base
has_many :students, dependent: :destroy
end
学生模型
class Student < ActiveRecord::Base
belongs_to :teacher
end
假设这些模型
Teacher.destroy
将删除实例化的教师以及与该教师关联的所有学生。
例如
Teacher.find(345).destroy
将销毁ID为345的老师的记录,并销毁与该老师关联的所有学生。
现在问题的核心是,当我的模型看起来像这样时会发生什么?
教师模式
class Teacher < ActiveRecord::Base
has_many :students, dependent: :destroy
end
学生模型
class Student < ActiveRecord::Base
belongs_to :teacher, dependent: :destroy
end
如果我打电话
Student.destroy
这会破坏实例化的学生和该学生的关联教师。但是据我所知(并且根据文档),这不会破坏与该老师有关的任何其他学生,使他们成为“孤儿”。
这是 Ruby 文档对此的引用 1
如果设置为 :destroy,则关联对象在该对象被销毁时被销毁。当belongs_to 与另一个类的has_many 关系一起使用时,不应指定此选项,因为可能会留下孤立的记录。