它是如何工作的 - `belongs_to :user, dependent: :destroy`

How it works - `belongs_to :user, dependent: :destroy`

我知道如何工作has_many :posts, dependent: :destroy。如果 Userhas_many 发布的东西被销毁,所有所属的帖子也会被销毁。

但是当 Post 模型 belongs_to :user, dependent: :destroy 时会发生什么? 我在 Rails 指南中找到了该选项,但我找不到如何使用它。

http://guides.rubyonrails.org/association_basics.html

它实例化所有用户的实例,然后向每个用户发送销毁消息。以这种方式销毁的用户会进入正常的销毁生命周期。

"has_many" 

一个老师"has_many"个学生。每个学生只有一个老师,但每个老师都有很多学生。这意味着学生上有一个外键或 teacher_id,指向他们所属的老师。

"belongs_to" 

一个学生"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

这会破坏实例化的学生和该学生的相关教师。然而,据我所知(根据文档),这不会破坏与该老师有关的任何其他学生,而让他们 'orphaned'。

这里引用 Ruby 文档中关于此的内容 1

If set to :destroy, the associated object is destroyed when this object is. This option should not be specified when belongs_to is used in conjunction with a has_many relationship on another class because of the potential to leave orphaned records behind.

我已经尝试设置依赖::destroy 进入 belongs_to。示例

class Post < ActiveRecord::Base
  has_many :comments, dependent: :destroy
end

class Comment < ActiveRecord::Base
  belongs_to :post, dependent: :destroy
end

在控制台中,如果评论已被销毁,post将被销毁 但我认为你不应该设置 belongs_to + dependent: :destroy together

其实facebook上的例子,当1个post的1条评论被删除后,这个post不会被删除