我知道如何工作has_many :posts, dependent: :destroy
。如果User
或has_many
帖子被销毁,则所有相关帖子也会被销毁。
但Post
模型belongs_to :user, dependent: :destroy
会发生什么?
我在Rails指南中找到了该选项,但我无法找到如何使用它。
答案 0 :(得分:20)
b
老师“有很多”学生。每个学生只有一位老师,但每位老师都有很多学生。这意味着学生上有一个外键或teacher_id,引用他们所属的教师。
[^c]
学生“归属于”老师。每位老师都有很多学生,但每个学生只有一位老师。同样,学生的外键是指他们所属的老师。
让我们用这个学生/老师的概念来解决这个问题。
教师模型
$
学生模特
"has_many"
假设这些模型
"belongs_to"
将删除实例化的教师以及与该教师关联的所有学生。
例如
class Teacher < ActiveRecord::Base
has_many :students, dependent: :destroy
end
会破坏ID为345的教师的记录,并摧毁与该教师相关的所有相关学生。
现在问题的核心是,当我的模型看起来像这样时会发生什么?
教师模型
class Student < ActiveRecord::Base
belongs_to :teacher
end
学生模特
Teacher.destroy
如果我打电话
Teacher.find(345).destroy
这会破坏实例化的学生和该学生的相关教师。然而据我所知(并根据文件),这不会摧毁任何其他与该老师相关的学生,使他们成为“孤儿”。
以下是有关此内容的Ruby文档的引用 1
如果设置为:destroy,则在此对象时销毁关联的对象。当belongs_to与另一个类的has_many关系一起使用时,不应指定此选项,因为可能会留下孤立的记录。
答案 1 :(得分:1)
它实例化所有用户的实例,然后将消息destroy发送给每个用户。导致以这种方式销毁的用户的正常销毁生命周期的结果。
答案 2 :(得分:0)
我尝试将dependent::destroy设置为belongs_to。例子
class Post < ActiveRecord::Base
has_many :comments, dependent: :destroy
end
class Comment < ActiveRecord::Base
belongs_to :post, dependent: :destroy
end
在控制台中,如果评论已被破坏,则帖子将被破坏 但是我认为您不应该一起设置belongs_to + dependent :: destroy
实际上,例如在Facebook上,如果删除1条帖子的1条评论,则该帖子不会被删除