ruby 如何工作- `belongs_to:user,dependent::销毁`

rnmwe5a2  于 2023-06-22  发布在  Ruby
关注(0)|答案(3)|浏览(136)

我知道怎么做has_many :posts, dependent: :destroy。如果Userhas_many发布的内容被销毁,则所有属于User的帖子也会被销毁。
但是当Post模型belongs_to :user, dependent: :destroy时会发生什么?我在Rails指南中找到了这个选项,但我不知道如何使用它。
http://guides.rubyonrails.org/association_basics.html

mqxuamgl

mqxuamgl1#

"has_many"

一个老师“有很多”学生。每个学生只有一个老师,但每个老师有很多学生。这意味着学生上有一个外键或teacher_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关系一起使用时,不应指定此选项,因为可能会留下孤立记录。

zynd9foi

zynd9foi2#

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

at0kjp5o

at0kjp5o3#

我试过set dependent::destroy into belongs_to.示例

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

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

在控制台中,如果comment已经被destroy,post也会被destroy,但是我认为你不应该设置belongs_to + dependent::一起毁灭
事实上,例如在Facebook上,当1个帖子的1条评论被删除时,这个帖子不会被删除

相关问题